Kafka:消费者可以在所有副本同步之前阅读消息吗?

时间:2019-02-27 22:14:07

标签: apache-kafka cap-theorem

我正在设计一个事件驱动的分布式系统。

我们需要分发需求的事件之一 1-低延迟 2-高可用性

对于这种事件类型,消息的持久性和副本之间的一致性并不重要。

在阅读Kafka documentation时,似乎消费者需要等到分区的所有同步副本将消息应用于日志后,消费者才能从任何副本读取消息

我的理解正确吗?如果可以的话,有办法解决

1 个答案:

答案 0 :(得分:1)

如果配置不正确;使用者可以读取尚未写入副本的数据。

根据book

  

仅在将数据提交给Kafka后,消费者才能使用它,这意味着已将其写入所有同步文件中。

如果您已配置 min.insync.replicas = 1 ,则只有Kafka不会等待副本追赶并将数据提供给消费者。

  

最小同步副本的推荐配置取决于应用程序的类型。如果您不关心数据,则可以为1,如果它是关键信息,则应将其配置为> 1。

您应该考虑两件事:

  1. 如果生产者不向Kafka发送消息,可以吗? (采用ack = 0触发并忘记策略)
  2. 如果消费者不阅读消息,可以吗? (如果min.insync.replica = 1,那么如果代理崩溃,那么您可能会丢失一些数据)