Kafka不会检索脱机时发送的邮件

时间:2017-03-03 07:12:03

标签: apache-kafka

我在一台机器上设置了一个kafka集群,并使用kafka-console-producer.bat和kafka-console-producer.bat进行测试

我启动了zookeeper,kafka-server,并使用kakfa-console-producer生成一些测试消息,然后是kakfa-console-consumer,没有打印消息。

但是,如果我启动zookeeper,kakfa-server,kakfa-console-consumer以及kakfa-console-producer并生成测试消息,则消息将打印在kakfa-console-consumer上。

为什么Kafka在离线时无法接收消息?我只使用1个经纪人。

1 个答案:

答案 0 :(得分:4)

Kafka有一个名为消费者群体的概念,每个消费者在连接到经纪人时加入一个消费群体。对于每个消费者群体,Kafka会跟踪读取的最后一个消息偏移量。如果代理不知道某个使用者组,则名为 auto.offset.reset 的使用者参数会影响所发生的情况:

  • 最早:开始阅读主题开头的消息
  • 最新:从主题的当前结尾开始阅读(所以在消费者启动后产生的任何消息)

此参数的默认值为 latest ,并且由于控制台消费者随机化其消费者群组,因此您的情况会发生这种情况,以及为什么您没有看到之前生成的任何消息消费者开始了。 您可以将参数--from-beginning添加到控制台使用者命令,该命令用于控制此工具的此行为。然后你应该看到所有的消息。

<强>更新 如果您想确保自己选择消费者所在的位置,则需要手动设置一个消费者群组,并在每次呼叫您的消费者时保持相同。 您可以通过使用此参数创建文本文件并将其传递给控制台使用者来完成此操作。

echo "group.id=test" > consumer.config
./kafka-console-consumer --topic test --new-consumer --bootstrap-server 127.0.0.1:9092 --consumer.config consumer.config