卡夫卡消费者从一开始就不消费

时间:2019-11-19 07:15:21

标签: apache-kafka kafka-consumer-api kafka-producer-api kafka-topic

我在本地计算机上安装了Kafka,并启动了zookeeper和一个代理服务器。

现在我有一个主题,内容如下:

~/Documents/backups/kafka_2.12-2.2.0/data/kafka$ kafka-topics.sh --zookeeper 127.0.0.1:2181 --topic edu-topic --describe
Topic:edu-topic PartitionCount:3    ReplicationFactor:1 Configs:
    Topic: edu-topic    Partition: 0    Leader: 0   Replicas: 0 Isr: 0
    Topic: edu-topic    Partition: 1    Leader: 0   Replicas: 0 Isr: 0
    Topic: edu-topic    Partition: 2    Leader: 0   Replicas: 0 Isr: 0

我有一个生产者,在启动消费者之前,它已经产生了一些消息,如下所示:

~/Documents/backups/kafka_2.12-2.2.0/data/kafka$ kafka-console-producer.sh --broker-list 127.0.0.1:9092 --topic edu-topic
>book 
>pen 
>pencil
>marker
>

当我使用--from-beginning选项启动消费者时,它不会显示生产者产生的所有消息:

~/Documents/backups/kafka_2.12-2.2.0/data/kafka$ kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic edu-topic --group edu-service --from-beginning

但是,它显示的是新添加的消息。

我在这里做什么错?有什么帮助吗?

4 个答案:

答案 0 :(得分:4)

  

-从头开始:如果使用者尚未确定要使用的偏移量,请从最早的消息开始   出现在日志中,而不是最新消息。

Kafka消费者第一次使用-从头开始,如果您重试我怀疑自己做过的事,它将从它离开的地方开始。您可以使用以下任一选项再次使用消息

  1. 使用下方重置消费者组偏移量

kafka-streams-application-reset.sh --application-id教育服务 --input-topics edu-topic --bootstrap-servers localhost:9092 --zookeeper 127.0.0.1:2181

然后从头开始重试

kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic edu-topic --group edu-service --from-beginning

  1. 使用新的消费者ID,该ID将从凝视点开始消费

kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic edu-topic --group new-edu-service --from-beginning

  1. 您还可以使用偏移量来消耗分区中的下N条消息

kafka-console-consumer.sh --bootstrap-server localhost:9092 --offset 0 --partition 0 --topic edu-topic

  

-offset:要从(非负数)开始使用的偏移ID,或者“最早的”(从头开始),或者   “最新”表示从头开始(默认值:最新)
  --partition:要消耗的分区从该分区的末尾开始,除非'--offset'   已指定。

答案 1 :(得分:1)

标志

--from-begining

在第一次启动/创建GroupConsumer或存储的(最后一次消耗的)偏移量过期(或可能尝试重置存储的偏移量)时,将会影响GroupConsumer的行为。

否则,GroupConsumer只会在存储的(最后一次提交的)偏移量上继续

请考虑从手册中获取更多信息。

答案 2 :(得分:1)

因为您使用的是旧的消费群体。 --from-beginning仅适用于尚未在Kafka群集上记录其组名称的新消费者组。

要从头开始再次食用,您可以:

  • 使用标志--from-beginning创建一个新的消费者组(更改组名)
  • 重置此使用者组的偏移量。我还没有尝试过,但是您可以对其进行测试here

答案 3 :(得分:0)

只需添加 --from-beginning

  

但是要知道从头开始的消息是不正确的

如果您对同一主题使用了多个分区。 仅在分区级别保证订单。 (对于同一分区)