簡體   English   中英

Kafka Consumer-接收消息不一致

[英]Kafka Consumer - receiving messages Inconsistently

我可以在命令行上針對Kafka位置安裝發送和接收消息。 我也可以通過Java代碼發送消息。 這些消息顯示在Kafka命令提示符下。 我也有一個針對Kafka使用者的Java代碼。 該代碼昨天收到消息。 但是,今天早上它沒有收到任何消息。 代碼未更改。 我想知道屬性配置是否不正確。 這是我的配置:

生產者:

bootstrap.servers - localhost:9092
group.id - test
key.serializer - StringSerializer.class.getName()
value.serializer - StringSerializer.class.getName()

並將ProducerRecord設置為

ProducerRecord<String, String>("test", "mykey",  "myvalue")

消費者:

zookeeper.connect - "localhost:2181"
group.id - "test"
zookeeper.session.timeout.ms - 500
zookeeper.sync.time.ms - 250
auto.commit.interval.ms - 1000
key.deserializer - org.apache.kafka.common.serialization.StringDeserializer
value.deserializer - org.apache.kafka.common.serialization.StringDeserializer

對於Java代碼:

   Map<String, Integer> topicCount = new HashMap<>();
   topicCount.put("test", 1);

   Map<String, List<KafkaStream<byte[], byte[]>>> consumerStreams = consumer
            .createMessageStreams(topicCount);
   List<KafkaStream<byte[], byte[]>> streams = consumerStreams.get(topic);

什么東西少了?

可能會發生許多事情。

首先,使用者的ZooKeeper會話超時非常低,這意味着使用者由於垃圾收集暫停而可能遇到許多“軟故障”。 發生這種情況時,消費群體將重新平衡,這可能會暫停消費。 而且,如果這種情況經常發生,那么使用者可能會進入一種狀態,在這種狀態下,由於不斷地重新平衡消息,因此它從不使用消息。 我建議將ZooKeeper會話超時增加到30秒,以查看是否可以解決問題。 如果是這樣,您可以嘗試將其降低。

其次,您是否可以確認正在針對“測試”主題生成新消息? 您的使用者只會使用尚未提交的新消息。 該主題可能沒有任何新消息。

第三,您是否在同一消費者組中有其他消費者可以處理消息? 如果一個使用者遇到頻繁的軟故障,則將為其他使用者分配其分區。

最后,您使用的是“舊”使用者,該使用者最終將被刪除。 如果可能的話,我建議轉移到Kafka 0.9中可用的“新”使用者(KafkaConsumer.java)。 盡管我不能保證這會解決您的問題。

希望這可以幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM