【问题标题】:Kafka behaviour if consumer fail消费者失败时的 Kafka 行为
【发布时间】:2018-09-29 15:51:28
【问题描述】:

我查阅了很多关于 Apache Kafka 事务、恢复和一次性新功能的不同文章。仍然不了解消费者恢复的问题。即使有一个消费者死亡,如何确保队列中的每条消息都会被处理?

假设我们有一个分配给消费者的主题分区。消费者轮询一条消息并开始处理它。并因电源故障而关闭而没有提交。会发生什么?来自同一组的任何其他消费者会重新轮询此消息吗?

【问题讨论】:

    标签: java apache-kafka message-queue


    【解决方案1】:

    消费者定期发送心跳,告诉代理他们还活着。如果代理没有收到消费者的心跳,它认为消费者已经死亡并重新分配其分区。因此,如果消费者死亡,它的分区将被分配给组中的另一个消费者,并且未提交的消息将被发送给新分配的消费者。

    【讨论】:

    • «未提交的消息将发送给新分配的消费者» -- 是否有描述此类行为的文章或文档?
    • 是的,例如javadoc
    • 我很抱歉重复了同样的问题,但是在 javadoc 中究竟哪里说未提交的消息将被发送给新分配的消费者?请问可以引用吗?
    • 它说 在每次轮询时,消费者将尝试使用最后消耗的偏移量作为起始偏移量并按顺序获取。最后消费的偏移量可以通过 seek(TopicPartition, long) 手动设置,也可以自动设置为订阅的分区列表的最后提交的偏移量。 所以当消费者从死消费者那里收到新的分区时,它会从最后提交的偏移量。
    • 但最好引用here当组中的消费者从协调器分配的分区中读取消息时,它必须提交与它已读取的消息相对应的偏移量。如果消费者崩溃或关闭,其分区将重新分配给另一个成员,该成员将从每个分区的最后提交偏移量开始消费。如果消费者在提交任何偏移量之前崩溃,那么接管其分区的消费者将使用重置策略。
    猜你喜欢
    • 1970-01-01
    • 2019-04-29
    • 2018-01-27
    • 1970-01-01
    • 2020-12-18
    • 2021-05-15
    • 2017-07-31
    • 1970-01-01
    • 2014-04-09
    相关资源
    最近更新 更多