【发布时间】:2017-01-31 15:25:53
【问题描述】:
为 Kafka 消费者设置 autocommit.enable 选项会导致消费的消息被提交,这意味着如果消费者崩溃,它将开始从上次提交的位置读取偏移量。
但是如果我们重启 kafka 服务器,消费者会重新读取已经提交的偏移量吗?或者这个选项在这种情况下也有效 - 服务器重启后只会使用未读消息?
【问题讨论】:
标签: apache-kafka
为 Kafka 消费者设置 autocommit.enable 选项会导致消费的消息被提交,这意味着如果消费者崩溃,它将开始从上次提交的位置读取偏移量。
但是如果我们重启 kafka 服务器,消费者会重新读取已经提交的偏移量吗?或者这个选项在这种情况下也有效 - 服务器重启后只会使用未读消息?
【问题讨论】:
标签: apache-kafka
你问过(有点):
消费者是否在提交的偏移量之前重新读取消息?
答案是否定的。在服务器上提交您的偏移量后,消费者将不会重新读取任何消息(除非他们手动想要)。
但你可能想问自己这个问题:
消费者是否可以多次消费同一个消息 即使他们启用了自动提交,也要多次?
答案是“不费力气”。要了解原因,请阅读Kafka design 的第 4.6 节。 Kafka 不提供消费者端的一次性交付保证。为了确保多个消费者不会消费相同的消息,您需要在消费者客户端之间进行协调。
另一种选择是让您的所有消息idempotent。这样,多个消费者是否多次处理同一消息并不重要。
【讨论】:
提交的偏移量在 Kafka 服务器重启后起作用,因为
【讨论】: