【问题标题】:Kafka: Can consumers read messages before all replicas are in sync?Kafka:消费者可以在所有副本同步之前读取消息吗?
【发布时间】:2019-02-27 22:14:06
【问题描述】:

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

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

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

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

我的理解正确吗?如果是的话有办法解决吗

【问题讨论】:

    标签: apache-kafka cap-theorem


    【解决方案1】:

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

    根据book

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

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

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

    你应该考虑两件事:

    1. Producer不给Kafka发消息可以吗? (使用 ack=0 时即发即弃策略)
    2. 如果消费者不阅读消息可以吗? (如果 min.insync.replica=1,那么如果代理出现故障,那么您可能会丢失一些数据)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-13
      • 2016-06-04
      • 2022-06-13
      • 2017-11-09
      • 1970-01-01
      相关资源
      最近更新 更多