ack 如何在 Kafka 中用于 pub/sub?

4 apache-kafka kafka-consumer-api kafka-producer-api

使用发布/订阅如何确认消息?

当消息发送给唯一组中的某些消费者时。如果所有消费者都确认了消息就意味着消息被确认了,还是所有消费者都确认了消息?

mik*_*ike 6

制片人

在生产者端,您可以选择等待代理确认消息已成功存储在主题中。您可以使用名为acks的生产者配置并将其设置为值1all

acks=1:这意味着领导者会将记录写入其本地日志,但会在不等待所有追随者完全确认的情况下做出响应。在这种情况下,如果领导者在确认记录后但在追随者复制它之前立即失败,那么记录将丢失。

acks=all:这意味着领导者将等待完整的同步副本集确认记录。这保证了只要至少一个同步副本保持活动状态,记录就不会丢失。这是最强有力的保证。这相当于 acks=-1 设置。

消费者

在消费者方面,您有消费者组的概念,该组将偏移量提交回代理,以确认消费者已处理哪些消息。每个消费者组将提交自己的偏移量,确认其消耗了它们。这独立于其他消费者组。

如果您有两个消费者组使用同一主题,则每个消费者组将根据其各自的配置独立提交其偏移量。

默认情况下,消费者通过消费者配置自动将偏移量提交回 Kafka enable.auto.commitauto.commit.interval.ms默认时间为 5 秒。或者您可以根据消费者内的处理逻辑手动提交偏移量。