Kafka 0.11新版本发布:主要的功能变更介绍:支持 EOS, 事务和幂等producer
2017-11-06 19:07
381 查看
[align=left]Apache Kafka近日推出0.11版本。这是一个里程碑式的大版本,特别是Kafka从这个版本开始支持“exactly-once”语义(下称EOS, exactly-once semantics)。本文简要介绍一下0.11版本主要的功能变更。[/align]
一、修改unclean.leader.election.enabled默认值
[align=left] Kafka社区终于下定决心要把这个参数的默认值改成false,即不再允许出现unclean leader选举的情况,在正确性和高可用性之间选择了前者。如果依然要启用它,用户需要显式地在server.properties中设置这个参数=true[/align]
二、确保offsets.topic.replication.factor参数被正确应用
[align=left] __consumer_offsets这个topic是Kafka自动创建的,在创建的时候如果集群broker数<offsets.topic.replication.factor,原先的版本取其小者,但这会违背用户设置该参数的初衷。因此在0.11版本中这个参数会被强制遵守,如果不满足该参数设定的值,会抛出GROUP_COORDINATOR_NOT_AVAILABLE。[/align]
三、优化了对Snappy压缩的支持
[align=left] 之前由于源代码中硬编码了block size,使得producer使用Snappy时的表现比LZ4相差很多,但其实Snappy和LZ4两者之差距不应该很大。故此0.11版本中对Snappy的默认block size做了调整。不过这一点需要详尽的性能测试报告来证明此改动是有效的。[/align]
四、消息增加头部信息(Header)
[align=left] Record增加了Header,每个header是一个KV存储。具体的header设计参见KIP-82[/align]
五、空消费者组延时rebalance
[align=left] 为了缩短多consumer首次rebalance的时间,增加了“group.initial.rebalance.delay.ms”用于设置group开启rebalance的延时时间。这段延时期间允许更多的consumer加入组,避免不必要的JoinGroup与SyncGroup之间的切换。当然凡事都是trade-off,引入这个必然带来消费延时。[/align]
六、消息格式变更
[align=left] 增加最新的magic值:2,还增加了header信息。同时为了支持幂等producer和EOS,增加一些与事务相关的字段,使得单个record数据结构体积增加。但因为优化了RecordBatch使得整个batch所占体积反而减少,进一步降低了网络IO开销。[/align]
七、新的分配算法:StickyAssignor
比range和round-robin更加平衡的分配算法。指定partition.assignment.strategy = org.apache.kafka.clients.consumer.StickyAssignor可以尝尝鲜。不过根据我的经验,分配不均匀的情况通常发生在每个consumer订阅topic差别很大的时候。比如consumer1订阅topic1, topic2, topic4, consumer2订阅topic3,
topic4这种情况
八、controller重设计
[align=left] Controller原来的设计非常复杂,使得社区里面的人几乎不敢改动controller代码。老版本controller的主要问题在我看来有2个:1. controller需要执行1,2,3,4,5,6步操作,倘若第3步出错了,无法回滚前两步的操作;2. 多线程访问,多个线程同时访问Controller上下文信息。0.11版本部分重构了controller,采用了单线程+基于事件队列的方式。具体效果咱们拭目以待吧~~[/align]
九、支持EOS
[align=left] 0.11最重要的功能,没有之一!EOS是流式处理实现正确性的基石。主流的流式处理框架基本都支持EOS(如Storm Trident, Spark Streaming, Flink),Kafka streams肯定也要支持的。0.11版本通过3个大的改动支持EOS:[/align]
[align=left]1.幂等的producer(这也是千呼万唤始出来的功能);[/align]
[align=left]2. 支持事务;[/align]
[align=left]3. 支持EOS的流式处理(保证读-处理-写全链路的EOS)[/align]
一、修改unclean.leader.election.enabled默认值
[align=left] Kafka社区终于下定决心要把这个参数的默认值改成false,即不再允许出现unclean leader选举的情况,在正确性和高可用性之间选择了前者。如果依然要启用它,用户需要显式地在server.properties中设置这个参数=true[/align]
二、确保offsets.topic.replication.factor参数被正确应用
[align=left] __consumer_offsets这个topic是Kafka自动创建的,在创建的时候如果集群broker数<offsets.topic.replication.factor,原先的版本取其小者,但这会违背用户设置该参数的初衷。因此在0.11版本中这个参数会被强制遵守,如果不满足该参数设定的值,会抛出GROUP_COORDINATOR_NOT_AVAILABLE。[/align]
三、优化了对Snappy压缩的支持
[align=left] 之前由于源代码中硬编码了block size,使得producer使用Snappy时的表现比LZ4相差很多,但其实Snappy和LZ4两者之差距不应该很大。故此0.11版本中对Snappy的默认block size做了调整。不过这一点需要详尽的性能测试报告来证明此改动是有效的。[/align]
四、消息增加头部信息(Header)
[align=left] Record增加了Header,每个header是一个KV存储。具体的header设计参见KIP-82[/align]
五、空消费者组延时rebalance
[align=left] 为了缩短多consumer首次rebalance的时间,增加了“group.initial.rebalance.delay.ms”用于设置group开启rebalance的延时时间。这段延时期间允许更多的consumer加入组,避免不必要的JoinGroup与SyncGroup之间的切换。当然凡事都是trade-off,引入这个必然带来消费延时。[/align]
六、消息格式变更
[align=left] 增加最新的magic值:2,还增加了header信息。同时为了支持幂等producer和EOS,增加一些与事务相关的字段,使得单个record数据结构体积增加。但因为优化了RecordBatch使得整个batch所占体积反而减少,进一步降低了网络IO开销。[/align]
七、新的分配算法:StickyAssignor
比range和round-robin更加平衡的分配算法。指定partition.assignment.strategy = org.apache.kafka.clients.consumer.StickyAssignor可以尝尝鲜。不过根据我的经验,分配不均匀的情况通常发生在每个consumer订阅topic差别很大的时候。比如consumer1订阅topic1, topic2, topic4, consumer2订阅topic3,
topic4这种情况
八、controller重设计
[align=left] Controller原来的设计非常复杂,使得社区里面的人几乎不敢改动controller代码。老版本controller的主要问题在我看来有2个:1. controller需要执行1,2,3,4,5,6步操作,倘若第3步出错了,无法回滚前两步的操作;2. 多线程访问,多个线程同时访问Controller上下文信息。0.11版本部分重构了controller,采用了单线程+基于事件队列的方式。具体效果咱们拭目以待吧~~[/align]
九、支持EOS
[align=left] 0.11最重要的功能,没有之一!EOS是流式处理实现正确性的基石。主流的流式处理框架基本都支持EOS(如Storm Trident, Spark Streaming, Flink),Kafka streams肯定也要支持的。0.11版本通过3个大的改动支持EOS:[/align]
[align=left]1.幂等的producer(这也是千呼万唤始出来的功能);[/align]
[align=left]2. 支持事务;[/align]
[align=left]3. 支持EOS的流式处理(保证读-处理-写全链路的EOS)[/align]
相关文章推荐
- 基于模板的通用代码生成器LKGenerator(一)-发布和主要功能介绍
- JEECG Framework 3.5.0 GA 新版本终于发布了,重量级功能(数据权限,国际化,多数据源),团队会努力推出新版本,希望大家多多支持!!
- WINX发布新版本,支持Visual C++ .NET 2003
- XMLSpy的主要功能介绍
- kafka0.8--0.11各个版本特性预览介绍
- 专业PDF转换器(支持OCR)功能介绍及安装注册步骤和使用方法详细说明
- 谷歌可穿戴SDK正式发布 支持语音和触控功能
- 全自动化“视频网站”视频制作与发布的分布式系统介绍 - 支持 Bitrate Switching(类似Smooth Streaming)
- 傲游新浪微博插件发布 支持自动备份和文字转换为图片功能
- CAD DLL发布v12新版本,支持最新版本的DWG - AutoCAD®DWG 2018
- DataUml Design 介绍8-DataUML 1.2版本正式发布(支持SQLite数据库、NetUML开发框架)
- WINX发布新版本,支持Visual C++ .NET 2003
- ReSharper的功能真的很强大主要是针对代码规范和优化,园子里介绍的也不少,如果你没有安装,那我只能表示你们会相见恨晚
- kafka0.8--0.11各个版本特性预览介绍
- ImageMagick的主要功能的简单介绍
- DBHelper (支持事务与数据库变更)
- ESFramework介绍之(17)―― 支持漫游用户和跨区域功能请求
- 傲游新浪微博插件发布 支持自动备份和文字转换为图片功能
- CodePlex上TlbImp新版本发布:基于规则的自定义功能
- 通过对PHP语言的学习,应该知道它是基于函数的一款HTML脚本语言。庞大的函数库支持着PHP语言功能的实现。下面我们为大家介绍有关PHP函数isset()与empty()的相关用法。