【问题标题】:Re-reading offset after kafka server rebootkafka服务器重启后重新读取偏移量
【发布时间】:2017-01-31 15:25:53
【问题描述】:

为 Kafka 消费者设置 autocommit.enable 选项会导致消费的消息被提交,这意味着如果消费者崩溃,它将开始从上次提交的位置读取偏移量。

但是如果我们重启 kafka 服务器,消费者会重新读取已经提交的偏移量吗?或者这个选项在这种情况下也有效 - 服务器重启后只会使用未读消息?

【问题讨论】:

    标签: apache-kafka


    【解决方案1】:

    你问过(有点):

    消费者是否在提交的偏移量之前重新读取消息?

    答案是否定的。在服务器上提交您的偏移量后,消费者将不会重新读取任何消息(除非他们手动想要)。

    但你可能想问自己这个问题:

    消费者是否可以多次消费同一个消息 即使他们启用了自动提交,也要多次?

    答案是“不费力气”。要了解原因,请阅读Kafka design 的第 4.6 节。 Kafka 不提供消费者端的一次性交付保证。为了确保多个消费者不会消费相同的消息,您需要在消费者客户端之间进行协调。

    另一种选择是让您的所有消息idempotent。这样,多个消费者是否多次处理同一消息并不重要。

    【讨论】:

      【解决方案2】:

      提交的偏移量在 Kafka 服务器重启后起作用,因为

      1. 当生产者发布消息时,它会获得一个偏移量,即 不可变,并在服务器重启后保留
        1. 在 Kafka 0.9 中,提交的偏移量存储在主题 __committed_offset(您可能需要检查该主题的名称)中之后,该主题会在服务器重启后保留
        2. 在 0.9 之前的 Kafka 中,提交的偏移量也将存储在 Zookeeper 中,并且 Zookeeper 将该偏移量保留在日志文件中

      【讨论】:

        猜你喜欢
        • 2021-08-16
        • 2017-11-25
        • 2019-08-16
        • 2021-10-05
        • 1970-01-01
        • 2018-01-30
        • 2021-01-17
        • 2022-06-11
        • 1970-01-01
        相关资源
        最近更新 更多