【问题标题】:How to let a consumer always start reading with the last massage?如何让消费者始终从最后一次按摩开始阅读?
【发布时间】:2021-10-09 13:24:04
【问题描述】:

让消费者始终阅读密钥的最后、最新消息的最佳解决方案是什么? kafka 有解决方案还是我需要 kafka 流?

一个例子:

带有键 K1-K3 的消息 m 在日志中:

                
    |K1 m0 | K2 m1 | K3 m2 | K2 m3 | K1 m4 | K2 m5 | K1 m6 | K3 m7 | K1 m8| ...
---------------------------------------------------------------------------------> t
 t1                                                             t2

两个消费者使用密钥 K1 读取消息。消费者 1 从 t1 开始,消费者 2 从 t2 开始。我希望 consumer2 从 m6 开始读取。

消费者 1:m0、m4、m6、m8、... 消费者 2:m6、m8、...

我的两种方法:

  1. 使用 auto.offset.reset='latest'。这种方法有两个问题。第一个是kafka中通常有一个初始偏移量。所以不调用 auto.offset.reset 方法。如果我另外设置 enable_auto_commit=False,消费者 2 将以 m8 而不是 m6 开头。
  2. 使用特定偏移量启动消费者 2。在这里,我不知道从哪里获得正确的结束偏移量,尤其是考虑到键。对于这个例子,我需要“K1 m6”的偏移量。

【问题讨论】:

    标签: apache-kafka kafka-consumer-api apache-kafka-streams


    【解决方案1】:

    正确的解决方案确实是将整个主题读入 KTable,然后加入该表或对相应的键使用交互式查询。
    如果您只在一个分区中拥有这些键,则不能让同一组的两个消费者指向不同的记录。

    设置auto.offset.reset 仅跟踪group.id,而不是主题本身的“初始偏移量”,并且不能为任何特定键设置

    【讨论】:

      猜你喜欢
      • 2016-02-14
      • 2019-08-29
      • 2017-02-15
      • 2020-03-14
      • 2014-08-30
      • 2017-10-12
      • 2016-10-23
      • 2015-11-10
      • 2019-06-02
      相关资源
      最近更新 更多