0

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

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

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

阅读 Kafka文档,消费者似乎需要等到一个分区的所有同步副本都将消息应用到他们的日志之前,消费者才能从任何副本中读取它。

我的理解正确吗?如果是这样,有没有办法解决它

4

1 回答 1

1

如果配置不当;消费者可以读取尚未写入副本的数据。

根据

数据只有在提交到 Kafka 后才可供消费者使用——这意味着它被同步写入所有数据。

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

min.insync.replicas 的推荐配置取决于应用程序的类型。如果您不关心数据,那么它可以是 1,如果它是关键信息,那么您应该将其配置为 >1。

您应该考虑两件事:

  1. 如果 Producer 不向 Kafka 发送消息可以吗?(使用 ack=0 触发并忘记策略)
  2. 如果消费者不阅读消息可以吗?(如果 min.insync.replica=1 那么如果代理出现故障,那么您可能会丢失一些数据)
于 2019-02-27T22:52:11.903 回答