当前位置: 首页 > 知识库问答 >
问题:

是什么决定了Kafka消费者抵消?

嵇光临
2023-03-14

我对Kafka比较陌生。我对它做了一些实验,但有一些东西对我来说是不清楚的关于消费者抵消。根据我到目前为止的理解,当使用者启动时,它将从其开始读取的偏移量由配置设置auto.offset.reset确定(如果我错了,请更正)。

现在举个例子,在主题中有10条消息(偏移0到9),一个消费者碰巧在它关闭之前(或者在我杀死消费者之前)消费了其中的5条消息。然后假设我重新启动消费者进程。我的问题是:

>

  • 如果auto.offset.reset设置为最早,是否总是从偏移量0开始消耗?

    如果auto.offset.reset设置为最新,是否将从偏移量5开始消耗?

    关于这种情况的行为总是确定性的吗?

    如果我的问题有任何不清楚的地方,请不要犹豫,发表评论。

  • 共有1个答案

    干旺
    2023-03-14

    它比您描述的要复杂一些。
    auto.offset.reset配置仅在您的使用者组没有在某处提交有效的偏移量时才启动(现在支持的两个偏移量存储是Kafka和Zookeeper),并且它还取决于您使用的使用者类型。

    如果您使用一个高级java使用者,那么想象一下以下场景:

    >

  • 您的使用者组group1中有一个使用者已使用了5条消息并已死亡。下一次启动这个使用者时,它甚至不会使用auto.offset.reset配置,而会从它死的地方继续,因为它只会从偏移量存储中获取存储的偏移量(如我提到的Kafka或ZK)。

    您在主题中有消息(如您所描述的),并且在新的使用者组group2中启动使用者。任何地方都没有存储偏移量,这一次,auto.offset.reset配置将决定是从主题的开头(最早)开始,还是从主题的结尾(最新)开始

    影响最早最新配置对应的偏移量值的另一个因素是日志保留策略。假设您有一个主题的保留时间配置为1小时。你产生了5条消息,然后一个小时后你又发布了5条消息。最新偏移量仍将与上一示例相同,但最早一不能是0,因为Kafka已经删除了这些消息,因此最早可用偏移量将是5

    上面提到的所有内容都与SimpleConsumer无关,每次运行它时,它将决定使用Auto.Offset.Reset配置从何处开始。

    如果您使用的Kafka版本早于0.9,则必须将最早最新替换为最小最大

  •  类似资料:
    • 是否有一种方法以编程方式访问和打印使用者滞后偏移,或者说使用者读取的最后一条记录的偏移与某个生产者写入该使用者分区的最后一条记录的偏移之间的位置差。 要知道我的最终目标是将这个值发送到prometheus进行监视,我应该在上面添加哪些语句来得到滞后偏移值?

    • 本文向大家介绍什么是kafka消费者组?相关面试题,主要包含被问及什么是kafka消费者组?时的应答技巧和注意事项,需要的朋友参考一下 答:消费者组的概念是Apache Kafka独有的。基本上,每个Kafka消费群体都由一个或多个共同消费一组订阅主题的消费者组成。

    • 问题内容: 我对Kafka比较陌生。我已经做了一些实验,但是对于消费者补偿我有些不清楚。根据到目前为止的了解,使用方启动时,将从其读取的偏移量由配置设置确定(如果我输入错了,请更正我)。 现在说,例如,该主题中有10条消息(偏移量0到9),一个消费者在崩溃之前(或我杀死该消费者之前)碰巧消耗了其中的5条消息。然后说我重新启动该使用者进程。我的问题是: 如果将设置为,它是否总是从偏移量0开始消耗?

    • 我已经做了一些Kafka流应用程序和Kafka消费者应用程序。最后,Kafka流不是什么,而是消费来自Kafka的实时事件的消费者。所以我不知道什么时候使用Kafka流,或者为什么我们应该使用Kafka流,因为我们可以在消费者端执行所有转换。

    • 我们有一个非常简单的Kafka Consumer(v 2.6.2)。它是使用者组中唯一的使用者,并且该组是唯一一个阅读主题的组(有6个分区,其中有大约300万个事件)。Broker也是2.6.x版本 由于我们需要实现一个“只有一次”的场景,我们深入研究了一下,如果我们真的只使用一次写入主题的每个事件。不幸的是,我们发现:消费者有时会跳过一个偏移量,有时甚至会跳过一组分区的偏移量。 消费者除了记录之

    • 但是,consumer只从主题中第一个未提交的消息开始轮询。我希望总是从偏移量0开始,不管提交的消息是什么。使用Alpakka消费者,如何手动指定偏移量?