我正在设计一个事件驱动的分布式系统。我们需要分发的事件之一需要1-低延迟2-高可用性对于这种事件类型,消息的持久性和副本之间的一致性并不重要。在阅读kafka文档时,使用者似乎需要等到分区的所有同步副本都将消息应用到其日志之后,才能从任何副本中读取消息。我的理解正确吗?如果是这样的话,有办法解决吗
t5fffqht1#
配置不当;使用者可以读取尚未写入副本的数据。根据这本书,数据只有在提交给Kafka后才可供消费者使用,这意味着数据是同步写入所有人的。如果您已经配置了min.insync.replicas=1,那么只有kafka不会等待复制副本赶上并将数据提供给消费者。min.insync.replicas的建议配置取决于应用程序的类型。如果您不关心数据,那么它可以是1,如果它是关键信息,那么您应该将其配置为>1。你应该考虑两件事:如果制作人不给Kafka发信息可以吗(确认为0时触发并忘记策略)如果消费者没有阅读信息,可以吗(如果min.insync.replica=1,那么如果代理失败,那么您可能会丢失一些数据)
1条答案
按热度按时间t5fffqht1#
配置不当;使用者可以读取尚未写入副本的数据。
根据这本书,
数据只有在提交给Kafka后才可供消费者使用,这意味着数据是同步写入所有人的。
如果您已经配置了min.insync.replicas=1,那么只有kafka不会等待复制副本赶上并将数据提供给消费者。
min.insync.replicas的建议配置取决于应用程序的类型。如果您不关心数据,那么它可以是1,如果它是关键信息,那么您应该将其配置为>1。
你应该考虑两件事:
如果制作人不给Kafka发信息可以吗(确认为0时触发并忘记策略)
如果消费者没有阅读信息,可以吗(如果min.insync.replica=1,那么如果代理失败,那么您可能会丢失一些数据)