gpt4 book ai didi

java - 如何配置 Kafka 使其表现得像一个 FiFo 队列?

转载 作者:行者123 更新时间:2023-12-04 15:59:05 29 4
gpt4 key购买 nike

我有一个小问题,那就是我必须使用 kafka 作为通知系统来启动我的应用程序流,一切都很好,但我想知道当队列中有未读消息时我是否可以改变顺序.

我解释一下:当topic有两条或两条以上的消息,消费者读取时,先读取,最后进入的,我想让它先读取,第一个进入的。

所以我想知道这是否可能,如果可能,我们必须为此做出改变。

我使用的是最新版本的 Spring Apache 和 Kafka 2.5.0

消费者配置:

@EnableKafka
@Configuration
public class KafkaConsumerConfig {

private static final String BOOTSTRAP_ADDRESS = "";

@Bean
public ConsumerFactory<String, String> consumerFactory() {
Map<String, Object> props = new HashMap<>();
props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, BOOTSTRAP_ADDRESS);
props.put(ConsumerConfig.GROUP_ID_CONFIG, "id");
props.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class);
props.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class);
return new DefaultKafkaConsumerFactory<>(props);
}


@Bean
public ConcurrentKafkaListenerContainerFactory<String, String> kafkaListenerContainerFactory() {

ConcurrentKafkaListenerContainerFactory<String, String> factory = new ConcurrentKafkaListenerContainerFactory<>();
factory.setConsumerFactory(consumerFactory());
return factory;
}
}



卡夫卡消费者:

@Component
public class KafkaConsumer {

@KafkaListener(topics = "Great_Topic")
private void listen(String msg) {
System.out.println("I've received: " + msg);
}
}



例子:

在我的生产者中,我按此顺序发送了以下消息:
  • Hello World 1
  • Hello World 2

  • 消费者输出:
  • Hello World 2
  • Hello World 1

  • 我希望输出与输入具有相同的顺序。

    最佳答案

    当您从一个主题中消费时,您可以选择从头开始读取,当您这样做时,您将按照消息在分区中生成的顺序获得所有消息。

    如果您只有一个分区 您将获得严格的 FIFO 行为 .

    如果您有多个分区(就像您在这里看到的那样),那么您会在一个分区内获得 FIFO,但跨分区它将是不确定的。因此,您可以获得您展示的行为。

    关于java - 如何配置 Kafka 使其表现得像一个 FiFo 队列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62450323/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com