apache-kafka - Kafka如何实现强一致性?
问题描述
尝试理解 Kafka 中的一致性维护。请找到场景并帮助理解。
Number of partition = 2
Replication factor = 3
Number of broker in the cluster = 4
在这种情况下,为了实现强一致性,应该确认多少节点。ack = all
或或任何ack = 3
其他值。请确认相同。
解决方案
您可能有兴趣查看卡夫卡峰会的当它绝对、肯定、必须在那里的演讲。
这是 Cloudera 的一位工程师给出的,Cloudera 有自己的关于 Kafka 可用性的文档
总而言之,多于 1 个副本和多于 1 个同步副本是一个好的开始。然后在生产者上,如果您可以牺牲吞吐量来获得数据可用性,这意味着您必须在继续之前写入所有副本,那么acks=all
. 否则,如果您相信领导者代理具有高可用性,但领导者选举是错误的,那么acks=1
在大多数情况下应该没问题。
acks=3
顺便说一句,这不是一个有效的配置。我认为您正在寻找复制因子为min.insync.replicas=2
; 从上面的链接acks=all
3
如果
min.insync.replicas
设置为2
并acks
设置为all
,则每条消息必须成功写入至少两个副本。这保证了消息不会丢失,除非两个主机都崩溃
此外,您可以启用事务型生产者,从 Kafka 0.11 开始,可以只进行一次处理
enable.idempotence=true
推荐阅读
- wordpress - 手动将 WooCommerce 订单从待付款发送到支付网关
- sql - 从 SQL SELECT 语句中的数组更改日期格式
- python - 将修改后的 *args 传递给 python 中的基类
- mysql - MySQL 触发器运行总数
- html - 如何从导航栏-collapse [ASP.NET webform] 中删除不需要的数字
- django - 图片未显示在我的 heroku 网站上。静态文件加载正常
- python - Python:检查今天是否是本月的第一个工作日
- google-chrome-os - chrome.system.network 在基于 ARM 的 Chromebook 上返回“未定义”
- linux - 如何在 Linux 中创建用于 Github 的 Jenkins SSH 密钥?
- python - 熊猫面板无法完成操作