Kafka Consumer - 不一致地接收消息

时间:2016-06-23 17:26:06

标签: apache-kafka kafka-consumer-api

我可以在命令行上针对Kafka位置安装发送和接收消息。我也可以通过Java代码发送消息。这些消息显示在Kafka命令提示符中。我还有一个Kafka消费者的Java代码。该代码昨天收到了消息。但是,它今天早上没有收到任何消息。代码没有改变。我想知道属性配置是不是很正确,也不是。这是我的配置:

制片人:

<select>

并将ProducerRecord设置为

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

消费者:

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

和Java代码:

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

缺少什么?

1 个答案:

答案 0 :(得分:0)

可能会发生很多事情。

首先,您的消费者的ZooKeeper会话超时非常低,这意味着消费者可能会遇到许多&#34;软故障&#34;由于垃圾收集暂停。当发生这种情况时,消费者组将重新平衡,这可以暂停消费。如果这种情况经常发生,消费者可能会进入一种从不消费消息的状态,因为它不断被重新平衡。我建议将ZooKeeper会话超时增加到30秒,看看是否可以解决问题。如果是这样,您可以尝试将其设置得更低。

其次,您能否确认正在生成新消息&#34; test&#34;话题?您的消费者只会使用尚未提交的新消息。该主题可能没有任何新消息。

第三,您是否在同一个消费者群体中有其他消费者可以处理消息?如果一个消费者经常遇到软故障,其他消费者将被分配其分区。

最后,您正在使用&#34; old&#34;将最终被删除的消费者。如果可能的话,我建议转到新的&#34;消费者(KafkaConsumer.java)在Kafka 0.9中提供。虽然我无法承诺这会解决您的问题。

希望这有帮助。