Kafka 0.11新版本发布:主要的功能变更介绍:支持 EOS, 事务和幂等producer
来源:互联网 发布:淘宝男装店铺 编辑:程序博客网 时间:2024/05/17 04:16
Apache Kafka近日推出0.11版本。这是一个里程碑式的大版本,特别是Kafka从这个版本开始支持“exactly-once”语义(下称EOS, exactly-once semantics)。本文简要介绍一下0.11版本主要的功能变更。
一、修改unclean.leader.election.enabled默认值
Kafka社区终于下定决心要把这个参数的默认值改成false,即不再允许出现unclean leader选举的情况,在正确性和高可用性之间选择了前者。如果依然要启用它,用户需要显式地在server.properties中设置这个参数=true
二、确保offsets.topic.replication.factor参数被正确应用
__consumer_offsets这个topic是Kafka自动创建的,在创建的时候如果集群broker数<offsets.topic.replication.factor,原先的版本取其小者,但这会违背用户设置该参数的初衷。因此在0.11版本中这个参数会被强制遵守,如果不满足该参数设定的值,会抛出GROUP_COORDINATOR_NOT_AVAILABLE。
三、优化了对Snappy压缩的支持
之前由于源代码中硬编码了block size,使得producer使用Snappy时的表现比LZ4相差很多,但其实Snappy和LZ4两者之差距不应该很大。故此0.11版本中对Snappy的默认block size做了调整。不过这一点需要详尽的性能测试报告来证明此改动是有效的。
四、消息增加头部信息(Header)
Record增加了Header,每个header是一个KV存储。具体的header设计参见KIP-82
五、空消费者组延时rebalance
为了缩短多consumer首次rebalance的时间,增加了“group.initial.rebalance.delay.ms”用于设置group开启rebalance的延时时间。这段延时期间允许更多的consumer加入组,避免不必要的JoinGroup与SyncGroup之间的切换。当然凡事都是trade-off,引入这个必然带来消费延时。
六、消息格式变更
增加最新的magic值:2,还增加了header信息。同时为了支持幂等producer和EOS,增加一些与事务相关的字段,使得单个record数据结构体积增加。但因为优化了RecordBatch使得整个batch所占体积反而减少,进一步降低了网络IO开销。
七、新的分配算法:StickyAssignor
比range和round-robin更加平衡的分配算法。指定partition.assignment.strategy = org.apache.kafka.clients.consumer.StickyAssignor可以尝尝鲜。不过根据我的经验,分配不均匀的情况通常发生在每个consumer订阅topic差别很大的时候。比如consumer1订阅topic1, topic2, topic4, consumer2订阅topic3, topic4这种情况
八、controller重设计
Controller原来的设计非常复杂,使得社区里面的人几乎不敢改动controller代码。老版本controller的主要问题在我看来有2个:1. controller需要执行1,2,3,4,5,6步操作,倘若第3步出错了,无法回滚前两步的操作;2. 多线程访问,多个线程同时访问Controller上下文信息。0.11版本部分重构了controller,采用了单线程+基于事件队列的方式。具体效果咱们拭目以待吧~~
九、支持EOS
0.11最重要的功能,没有之一!EOS是流式处理实现正确性的基石。主流的流式处理框架基本都支持EOS(如Storm Trident, Spark Streaming, Flink),Kafka streams肯定也要支持的。0.11版本通过3个大的改动支持EOS:
1.幂等的producer(这也是千呼万唤始出来的功能);
2. 支持事务;
3. 支持EOS的流式处理(保证读-处理-写全链路的EOS)
阅读全文
0 0
- Kafka 0.11新版本发布:主要的功能变更介绍:支持 EOS, 事务和幂等producer
- Kafka的 Consumer和Producer
- Kafka的Producer和Consumer源码学习
- kafka producer的serializer
- kafka的producer测试
- Kafka的Producer和Consumer的示例(使用java语言)
- Kafka的Producer和Consumer的示例(使用java语言)
- Kafka 编写自己的producer、partitioner和consumer
- Scala实现Kafka的producer
- 跨平台远程框架Remoting SDK发布v9新版本,增加新的Code First服务器等功能
- CAD DLL发布v12新版本,支持最新版本的DWG
- Kafka Producer
- kafka producer
- kafka--producer
- CodePlex上TlbImp新版本发布:基于规则的自定义功能
- CodePlex上TlbImp新版本发布:基于规则的自定义功能
- Kafka 学习笔记(4) - Consumer和Producer
- spring集成kafka实现producer和consumer
- 前端性能优化
- 理解数据库事务隔离级别以及脏读, 不可重复读, 幻读
- 追赶法求三角方程组
- Necklace UVA
- java设计模式之单例模式
- Kafka 0.11新版本发布:主要的功能变更介绍:支持 EOS, 事务和幂等producer
- 莫名图片
- 关于json对象的增删改查
- Centos7下QT5.9.2环境搭建
- java中的参数传递问题
- 注意事项
- map遍历
- 欢迎使用CSDN-markdown编辑器
- 脏读、幻读、不可重复读和丢失更新