[英]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.