我正在设计一个事件驱动的分布式系统。
我们需要分发需求的事件之一1-低潜伏期2-高可用性
消息的持久性和副本之间的一致性对于此事件类型并不重要。
阅读Kafka文档似乎需要等待,直到分区的所有同步副本都将消息应用于其日志中,然后消费者可以从任何副本中读取。
我的理解正确吗?如果是这样,是否有办法
如果不正确地配置;消费者可以读取尚未写入复制的数据。
根据这本书,
数据仅在将其授予Kafka之后才能使用,这意味着将其写入所有同步。
。
如果您已经配置了 min.insync.replicas = 1 ,那么只有Kafka将不会等待复制品赶上并将数据提供给消费者。
推荐的Min.insync.replicas的配置取决于应用程序的类型。如果您不关心数据,则可以是1,如果它是关键信息,则应将其配置为>1。
您应该考虑两件事:
- 如果制片人不向卡夫卡发送消息,还可以吗?(FIRE&忘记ACK = 0的策略)
- 如果消费者没有阅读消息,还可以吗?(如果min.insync.replica = 1,则如果经纪人降低,则可能会丢失一些数据)