Kafka实战(五) - Kafka的秘技"坂本"之争

简介: Kafka实战(五) - Kafka的秘技"坂本"之争

image.png

只有顺应版本,才能成就王者不败神话

也是能否用好Kafka的关键。

不论是哪种Kafka,本质上都基于core Apache Kafka

那就来说说Apache Kafka版本号的问题


1 缘何"在乎"你这版本号

直接使用最新版本不就好了吗?

当然了!这的确是一种有效策略,这种策略并非在任何场景下都适用

如果不了解各个版本之间的差异和功能变化,怎么能够准确地评判某Kafka版本是不是满足你的业务需求呢?

因此在深入学习Kafka之前,花些时间搞明白版本演进,实际上是非常划算的一件事。

2 版本的命名

当前Apache Kafka已经更迭至2.3

image.png

很多人对于Kafka的版本命名理解存在歧义

  • 在官网上下载Kafka时,会看到这样的版本:

image.png

于是有些同学就会纳闷,难道Kafka版本号不是2.11或2.12吗?

并不呀,前面的版本号是编译Kafka源代码的Scala编译器的版本。Kafka服务器端的代码完全由Scala语言编写,Scala同时支持面向对象编程和函数式编程,用Scala写成的源代码编译之后也是普通的“.class”文件,因此我们说Scala是JVM系的语言.


回到刚才的版本号讨论。现在你应该知道了对于kafka-2.11-2.3.0的说法,真正的Kafka版本号实际上是2.3.0

  • 前面的2表示大版本号,即Major Version
  • 中间的3表示小版本号或次版本号,即Minor Version
  • 最后的0表示修订版本号,也就是Patch号


Kafka社区在发布1.0.0版本后特意写过一篇文章,宣布Kafka版本命名规则正式从4位演进到3位,比如0.11.0.0版本就是4位版本号。


像0.11.0.0这样的版本虽然有4位版本号,但其实它的大版本是0.11,而不是0,所以如果这样来看的话Kafka版本号从来都是由3个部分构成,即“大版本号 - 小版本号 - Patch号”。这种视角可以一统Kafka版本命名


假设碰到的Kafka版本是0.10.2.2,你现在就知道了它的大版本是0.10,小版本是2,总共打了两个大的补丁,Patch号是2


3 Kafka版本演进

Kafka目前总共演进了7个大版本,分别是0.7、0.8、0.9、0.10、0.11、1.0和2.0


3.1 版本代号:0.7

1.png

“上古”版本,很多人都没触过

  • 引入取决于空间的保留设置
  • 添加可选的mx4j支持以通过http公开jmx
  • 在Kafka中介绍压缩功能
  • 提供默认生产者,用于接收来自STDIN的消息
  • 通过MBean公开总指标
  • 将python生产者升级到新的消息格式版本
  • 公开JMX操作以动态设置记录器级别
  • 基于时间的日志段推出


该版本只提供最基础的消息队列功能,连副本机制都没有!


3.2 版本代号:0.8

  • kafka集群内副本支持
  • 支持多个数据目录
  • 在kafka asynchonous中进行请求处理
  • 改进Kafka内部指标
  • 添加’log.file.age’配置参数以在日志文件达到特定年龄后强制轮换它们
  • 公开JMX操作以动态设置记录器级别
  • 基于时间的日志段推出
  • 为Log子系统添加Performance Suite
    在zk使用者中修复压缩消息的commit()


正式引入了副本机制,至此Kafka成为了一个真正意义上完备的分布式高可靠消息队列解决方案。

有了副本机制,Kafka能比较好地做到消息无丢失

那时生产和消费消息使用的还是老版本客户端API


所谓的老版本是指当用它们的API开发生产者和消费者应用时

需要指定ZooKeeper的地址而非Broker的地址


老版生产者API,默认使用同步方式发送消息,可想而知其吞吐量不会高

虽然它也支持异步的方式,但实际场景中可能会造成消息的丢失

因此0.8.2.0版本社区引入了 新版本Producer API


image.png

  • 即需要指定Broker地址的Producer。

建议是尽量使用比较新的版本


3.3 版本代号:0.9

0.9大版本增加了基础的安全认证/权限功能,同时使用Java重写了新版本消费者API,另外还引入了Kafka Connect组件用于实现高性能的数据抽取

新版本Producer API在这个版本中算比较稳定了


如果你使用0.9作为线上环境不妨切换到新版本Producer,这是此版本一个不太为人所知的优势。但和0.8.2引入新API问题类似,不要使用新版本Consumer API,因为Bug超多的,绝对用到你崩溃。即使你反馈问题到社区,社区也不会管的,它会无脑地推荐你升级到新版本再试试,因此千万别用0.9的新版本Consumer API。对于国内一些使用比较老的CDH的创业公司,鉴于其内嵌的就是0.9版本,所以要格外注意这些问题。


3.4 版本代号:0.10

该版本引入了Kafka Streams

Kafka正式升级成分布式流处理平台,虽然此时的Kafka Streams还基本不能线上部署使用

0.10大版本包含两个小版本:0.10.1和0.10.2,它们的主要功能变更都是在Kafka Streams组件上

如果你把Kafka用作消息引擎,实际上该版本并没有太多的功能提升

自0.10.2.2版本起,新版本Consumer API算是比较稳定了。如果你依然在使用0.10大版本,我强烈建议你至少升级到0.10.2.2然后使用新版本Consumer API


0.10.2.2修复了一个可能导致Producer性能降低的Bug。基于性能的缘故你也应该升级到0.10.2.2。


3.5 版本代号:0.11

幂等性Producer / 事务(Transaction)API

对Kafka消息格式做了重构

Producer实现幂等性以及支持事务都是Kafka实现流处理结果正确性的基石

没有它们,Kafka Streams在做流处理时无法向批处理那样保证结果的正确性

当然同样是由于刚推出,此时的事务API有一些Bug,不算十分稳定

另外事务API主要是为Kafka Streams应用服务的,实际使用场景中用户利用事务API自行编写程序的成功案例并不多见。


第二个重磅改进是消息格式的变化。虽然它对用户是透明的,但是它带来的深远影响将一直持续。因为格式变更引起消息格式转换而导致的性能问题在生产环境中屡见不鲜,所以你一定要谨慎对待0.11版本的这个变化。不得不说的是,这个版本中各个大功能组件都变得非常稳定了,国内该版本的用户也很多,应该算是目前最主流的版本之一了。也正是因为这个缘故,社区为0.11大版本特意推出了3个Patch版本,足见它的受欢迎程度


如果你对1.0版本是否适用于线上环境依然感到困惑,那么至少将你的环境升级到0.11.0.3,因为这个版本的消息引擎功能已经非常完善了。


1.0和2.0两个大版本主要还是Kafka Streams的各种改进,在消息引擎方面并未引入太多的重大功能特性

Kafka Streams的确在这两个版本有着非常大的变化,也必须承认Kafka Streams目前依然还在积极地发展着

如果你是Kafka Streams的用户,至少选择2.0.0版本


基于Kafka Streams 1.0版本撰写的。用2.0版本去运行书中的例子,居然很多都已经无法编译了,足见两个版本变化之大。不过如果你在意的依然是消息引擎,那么这两个大版本都是适合于生产环境的。


不论你用的是哪个版本,都请尽量保持服务器端版本和客户端版本一致,否则你将损失很多Kafka为你提供的性能优化收益。


4 总结

每个Kafka版本都有它恰当的使用场景和独特的优缺点,切记不要一味追求最新版本

不要成为最新版本的“小白鼠”

了解了各个版本的差异之后,一定能够根据自己的实际情况作出最正确的选择


参考

  • Kafka核心技术与实战
目录
相关文章
|
7月前
|
消息中间件 缓存 Java
✈️【Kafka技术专题】「开发实战篇」深入实战探索Kafka的生产者的开发实现及实战指南
✈️【Kafka技术专题】「开发实战篇」深入实战探索Kafka的生产者的开发实现及实战指南
77 0
|
28天前
|
消息中间件 数据挖掘 Kafka
Apache Kafka流处理实战:构建实时数据分析应用
【10月更文挑战第24天】在当今这个数据爆炸的时代,能够快速准确地处理实时数据变得尤为重要。无论是金融交易监控、网络行为分析还是物联网设备的数据收集,实时数据处理技术都是不可或缺的一部分。Apache Kafka作为一款高性能的消息队列系统,不仅支持传统的消息传递模式,还提供了强大的流处理能力,能够帮助开发者构建高效、可扩展的实时数据分析应用。
74 5
|
2月前
|
消息中间件 存储 druid
大数据-156 Apache Druid 案例实战 Scala Kafka 订单统计
大数据-156 Apache Druid 案例实战 Scala Kafka 订单统计
42 3
|
4月前
|
消息中间件 Java Kafka
"Kafka快速上手:从环境搭建到Java Producer与Consumer实战,轻松掌握分布式流处理平台"
【8月更文挑战第10天】Apache Kafka作为分布式流处理平台的领头羊,凭借其高吞吐量、可扩展性和容错性,在大数据处理、实时日志收集及消息队列领域表现卓越。初学者需掌握Kafka基本概念与操作。Kafka的核心组件包括Producer(生产者)、Broker(服务器)和Consumer(消费者)。Producer发送消息到Topic,Broker负责存储与转发,Consumer则读取这些消息。首先确保已安装Java和Kafka,并启动服务。接着可通过命令行创建Topic,并使用提供的Java API实现Producer发送消息和Consumer读取消息的功能。
76 8
|
6月前
|
消息中间件 存储 Kafka
go语言并发实战——日志收集系统(二) Kafka简介
go语言并发实战——日志收集系统(二) Kafka简介
121 1
|
6月前
|
消息中间件 算法 Java
go语言并发实战——日志收集系统(三) 利用sarama包连接KafKa实现消息的生产与消费
go语言并发实战——日志收集系统(三) 利用sarama包连接KafKa实现消息的生产与消费
117 0
|
7月前
|
消息中间件 JSON Kafka
【十九】初学Kafka并实战整合SpringCloudStream进行使用
【十九】初学Kafka并实战整合SpringCloudStream进行使用
125 1
【十九】初学Kafka并实战整合SpringCloudStream进行使用
|
7月前
|
消息中间件 存储 Kafka
【深入浅出 RocketMQ原理及实战】「底层源码挖掘系列」透彻剖析贯穿一下RocketMQ和Kafka索引设计原理和方案
【深入浅出 RocketMQ原理及实战】「底层源码挖掘系列」透彻剖析贯穿一下RocketMQ和Kafka索引设计原理和方案
126 1
|
7月前
|
消息中间件 监控 Java
✈️【Kafka技术专题】「核心原理篇」深入实战探索Kafka的Broker的原理及可靠性机制分析
✈️【Kafka技术专题】「核心原理篇」深入实战探索Kafka的Broker的原理及可靠性机制分析
195 0
下一篇
无影云桌面