【发布时间】:2019-02-27 22:14:06
【问题描述】:
我正在设计一个事件驱动的分布式系统。
我们需要分发需求的事件之一 1- 低延迟 2- 高可用性
消息的持久性和副本之间的一致性对于这种事件类型并不重要。
阅读 Kafka documentation 似乎消费者需要等到一个分区的所有同步副本都将消息应用到他们的日志之前,消费者才能从任何副本读取它。
我的理解正确吗?如果是的话有办法解决吗
【问题讨论】:
我正在设计一个事件驱动的分布式系统。
我们需要分发需求的事件之一 1- 低延迟 2- 高可用性
消息的持久性和副本之间的一致性对于这种事件类型并不重要。
阅读 Kafka documentation 似乎消费者需要等到一个分区的所有同步副本都将消息应用到他们的日志之前,消费者才能从任何副本读取它。
我的理解正确吗?如果是的话有办法解决吗
【问题讨论】:
如果配置不当;消费者可以读取尚未写入副本的数据。
根据book,
数据只有在被提交到 Kafka 后才可供消费者使用——这意味着它被同步写入所有数据。
如果您已配置 min.insync.replicas=1,那么只有 Kafka 不会等待副本赶上并将数据提供给消费者。
min.insync.replicas 的推荐配置取决于应用程序的类型。如果您不关心数据,那么它可以是 1,如果它是关键信息,那么您应该将其配置为 >1。
你应该考虑两件事:
【讨论】: