Nbe*_*rt. 9 bigdata apache-kafka cap-theorem
我开始了解Apache Kafka.这篇https://engineering.linkedin.com/kafka/intra-cluster-replication-apache-kafka文章指出Kafka是CAP-Theorem中的CA系统.因此,它侧重于副本之间的一致性以及整体可用性.
我最近听说过CAP-Theorem的扩展名为PACELC(https://en.wikipedia.org/wiki/PACELC_theorem).这个定理可以这样形象化:
我的问题是如何在PACELC中描述Apache Kafka.我认为Kafka会关注分区发生时的一致性,但如果没有分区则会出现什么情况呢?重点是低熟度还是强一致性?
谢谢!
Ale*_*lex 10
这取决于您的配置.
Kafka由CP ZooKeeper支持,用于需要强一致性的操作,例如控制器选举(决定分区领导),代理注册,动态配置,acl-s等.
至于发送给kafka的日期 - 保证可在生产者上配置级别,每个主题基础或/和更改代理默认值.
开箱即用的默认配置(min.insync.replicas=1,default.replication.factor=1)您将获得AP系统(最多一次).
如果你想要实现CP,你可以设置min.insync.replicas=2主题复制因子为3 - 然后生成一个消息,acks=all保证CP设置(至少一次),但(如预期的那样)将在没有足够副本(<2)的情况下阻止)可用于特定主题/分区对.(参见design_ha,producer config docs)
Kafka管道可以进一步调整到一次方向.
CAP和PACELC
就PACELC而言,一些延迟改进决策已经成为默认值.例如,kafka默认情况下不会将fsync每条消息发送到光盘 - 它会写入pagecache并让操作系统处理刷新.默认值更喜欢使用复制来保持持久性.它的配置以及-看flush.messages,flush.ms经纪人/主题配置.
由于它接收的消息的通用性(它只是一个字节流) - 它不能进行任何后分区合并,或者使用CRDT技巧来保证分区期间的可用性,并最终恢复一致性.
在kafka-s 通用字节流情况下,我没有看到/知道如何give up在延迟期间保持一致性.您可能会放弃强一致性(线性化)并尝试" 更多一致性 "(涵盖更多的故障情况,或减少数据丢失的大小),但这有效地调整AP系统以获得更高的一致性,而不是调整CP以降低延迟.normal operation
您可能会看到AP/CP权衡和配置呈现为至少一次与最多一次与完全一致.
测试
为了理解这些参数如何影响延迟 - 我认为最好的方法是使用不同的参数测试您的设置.以下命令将生成1Gb的数据:
kafka-producer-perf-test --topic test --num-records 1000000 --record-size 100 --throughput 10000000 --producer-props bootstrap.servers=kafka:9092 acks=all`
Run Code Online (Sandbox Code Playgroud)
然后尝试使用不同的生产者参数:
acks=1
acks=all
acks=1 batch.size=1000000 linger.ms=1000
acks=all batch.size=1000000 linger.ms=1000
Run Code Online (Sandbox Code Playgroud)
它易于启动集群并启动/停止/终止节点以测试某些故障情况,例如使用compose
链接和参考
您可以检查(不幸的是过时,但仍然与主题相关)jepsen测试和后续,只是为了增加一些关于这是如何随着时间的推移发展的背景.
我强烈鼓励检查一些论文,这将提供更多的观点:
对CAP定理的批判.Martin Kleppmann
CAP十二年后:"规则"如何改变.埃里克布鲁尔
| 归档时间: |
|
| 查看次数: |
1274 次 |
| 最近记录: |