【问题标题】:Kafka consumer not consuming from beginning卡夫卡消费者从一开始就没有消费
【发布时间】:2020-03-14 15:28:12
【问题描述】:

我在本地机器上设置了 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

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

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

【问题讨论】:

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


    【解决方案1】:

    --from-beginning:如果消费者还没有确定的消费起点,则从最早的消息开始 显示在日志中而不是最新消息中。

    Kafka 消费者第一次使用 --from-beginning 如果您重试,我怀疑您这样做了,它将从它离开的地方开始。您可以使用以下任何选项再次使用该消息

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

    kafka-streams-application-reset.sh --application-id edu-service --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

    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 : 从 Consumption 消费的分区从分区的末尾开始,除非 '--offset' 已指定。

    【讨论】:

    • 另一个选项是使用kafka-consumer-groupskafka-consumer-groups --bootstrap-server localhost:9092 --group edu-service --topic edu-topic --to-earliest --reset-offsets --execute 将偏移重置为最早。这在 v0.9.0 中可用。
    【解决方案2】:

    国旗

    --from-begining
    

    将影响您的 GroupConsumer 第一次启动/创建时的行为,或者存储的(上次提交的消费)偏移量已过期(或者可能在您尝试重置存储的偏移量时)。

    否则 GroupConsumer 将在存储的(上次提交的)偏移量处继续

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

    【讨论】:

      【解决方案3】:

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

      要从头开始重新消费,您可以:

      • 使用标志--from-beginning 启动一个新的消费者组(更改组名)
      • 重置此消费者组的偏移量。我还没试过,但你可以测试一下here

      【讨论】:

        【解决方案4】:

        只需添加 --从头开始

        但要知道,从一开始的消息就不会按顺序排列

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-09-18
          • 1970-01-01
          • 2017-10-12
          • 2019-07-03
          • 2018-05-05
          • 2021-08-22
          • 1970-01-01
          • 2020-07-24
          相关资源
          最近更新 更多