Apache Kafka 版本演进及特性介绍

FergusonAdela 发布于1月前
0 条问题

前段时间有一个同事问到: Kafka 0.8.2 只能使用Zookeeper连接吗? 虽然仍有一部分Kafka的老用户在使用 0.8.x 版本,但 Kafka 0.8.x 确实是比较老的版本了。 如果不是对Kafka非常熟悉,很容易忽略各个版本之间的差异,也不会清楚某个版本的特点及使用方式。 本文我们就一起学习下Kafka的历史版本演进,增加我们对Kafka的了解,对于Kafka的技术选型也具有指导意义 。

一、Kafka概述

Kafka是目前主流的分布式消息引擎及流处理平台,经常用做企业的消息总线、实时数据管道,有的还把它当做存储系统来使用。 早期Kafka的定位是一个高吞吐的分布式消息系统,但随着版本的不断迭代,目前已经发展成为一个分布式流处理平台 了 。

Kafka遵循生产者消费者模式,生产者发送消息到Broker中某一个Topic的具体分区里,消费者从一个或多个分区中拉取数据进行消费。 目前Kafka主要提供了四套核心的API,Producer API、Consumer API、Streams API与Connector API。 随着Kafka不同版本的发布,API的支持也有所不同,具体也可参考下面的介绍 。

二、Kafka版本规则

在 Kafka 1.0.0之前基本遵循4位版本号,比如Kafka 0.8.2.0、Kafka 0.11.0.3等。 而从1.0.0开始Kafka就告别了4位版本号,遵循 Major.Minor.Patch 的版本规则,其中Major表示大版本,通常是一些重大改变,因此彼此之间功能可能会不兼容; Minor表示小版本,通常是一些新功能的增加; 最后Patch表示修订版,主要为修复一些重点Bug而发布的版本。 比如Kafka 2.1.1,大版本就是2,小版本是1,Patch版本为1,是为 修复 Bug发布的第1个版本 。

三、Kafka版本演进

Kafka总共发布了7个大版本,分别是0.7.x、0.8.x、0.9.x、0.10.x、0.11.x、1.x及2.x版本。 截止目前,最新版本是Kafka 2.4.0,也是最新稳定版本。

0.7.x版本

这是很老的Kafka版本,它只有基本的消息队列功能,连消息副本机制都没有,不建议使用。

0.8.x版本

两个重要特性,一个是Kafka 0.8.0增加了副本机制,另一个是Kafka 0.8.2.0引入了新版本Producer API。新旧版本Producer API如下:

//旧版本Producer
kafka.javaapi.producer.Producer<K,V> 

//新版本Producer
org.apache.kafka.clients.producer.KafkaProducer<K,V>

与旧版本相比,新版本Producer API有点不同,一是连接Kafka方式上,旧版本的生产者及消费者API连接的是Zookeeper,而新版本则连接的是Broker;二是新版Producer采用异步方式发送消息,比之前同步发送消息的性能有所提升。但此时的新版Producer API尚不稳定,不建议生产使用。

0.9.x版本

Kafka 0.9 是一个重大的版本迭代,增加了非常多的新特性,主要体现在三个方面:

  • 安全方面 : 在0.9.0之前,Kafka安全方面的考虑几乎为0。Kafka 0.9.0 在安全认证、授权管理、数据加密等方面都得到了支持,包括支 持Kerberos等。

  • 新版本Consumer API : Kafka 0.9.0 重写并提供了新版消费端API,使用方式也是从连接Zookeeper切到了连接Broker,但是此时新版Consumer API也不太稳定、存在不少Bug,生产使用可能会比较痛苦;而0.9.0版本的Producer API已经比较稳定了,生产使用问题不大 。

  • Kafka Connect :Kafka 0.9.0 引入了新的组件 Kafka Connect ,用于实现Kafka与其他外部系统之间的数据抽取。

0.10.x版本

Kafka 0.10 是一个重要的大版本,因为Kafka 0.10.0.0 引入了 Kafka Streams,使得Kafka不再仅是一个消息引擎,而是往一个分布式流处理平台方向发展。 0.10 大版本包含两个小版本:0.10.1 和 0.10.2,它们的主要功能变更都是在 Kafka Streams 组件上。

值得一提的是,自 0.10.2.2 版本起,新版本 Consumer API 已经比较稳定了,而且 Producer API 的性能也得到了提升,因此对于使用 0.10.x 大版本的用户,建议使用或升级到 Kafka 0.10.2.2 版本。

0.11.x版本

Kafka 0.11  是一个里程碑式的大版本,主要有两个大的变更,一是 Ka f ka 从这个版本开始支持 Exactly-Once 语义 即 精准一次语义 ,主要是实现了P roducer端的消息幂等性,以及事务特性,这对于Kafka 流式处理具有非常大的意义。

另 一个重大变更是 Kafka消息格式 的重构 ,Kafka 0.11主要为了实现Producer幂等性与事务特性,重构了投递消息的 数据结构 。这一点非常值得关注 ,因为Kafka 0.11之后的消息格式发生了变化,所以我们要特别注意Kafka不同版本间消息格式不兼容的问题。

1.x版本

Kafka 1.x 更多的是Kafka Streams方面的改进,以及Kafka Connect的改进与功能完善等。 但仍有两个重要特性,一是 Kafka 1.0.0实现了 磁盘的故障转移 ,当Broker的某一块磁盘损坏时数据会自动转移到其他正常的磁盘上,Broker还会正常工作,这在之前版本中则会直接导致Broker宕机,因此Kafka的可用性与可靠性得到了提升;

二是Kafka 1.1.0开始支持 副本跨路径迁移 ,分区副本可以在同一Broker不同磁盘目录间进行移动,这对于磁盘的负载均衡非常有意义。

2.x版本:

Kafka 2.x 更多的也是Kafka Streams、Connect方面的性能提升与功能完善,以及安全方 面的增强等。一个使用特性,Kafka 2.1.0开始支持ZStandard的压缩方式,提升了消息的压缩比,显著减少了磁盘空间与网络io消耗。

四、Kafka版本建议

  1. 遵循一个基本原则,Kafka客户端版本和服务端版本应该保持一致,否则可能会遇到一些问题。

  2. 根据是否用到了Kafka的一些新特性来选择,假如要用到Kafka生产端的消息幂等性,那么建议选择Kafka 0.11 或之后的版本。

  3. 选择一个自己熟悉且稳定的版本,如果说没有比较熟悉的版本,建议选择一个较新且稳定、使用比较广泛的版本。

主要参考:

1. https://www.cnblogs.com/huxi2b/

2.  http://kafka.apache.org/downloads 及相关的Release记录

本文重点总结了Kafka的各版本演进,及关键特性,希望对Kafka使用者有比较好的参考意义。

往期文章精选:

1、 菜鸟供应链实时数仓的架构演进及应用场景

2、 京东JDHBase异地多活实践

3、 HBase 集成 Phoenix 构建二级索引实践

4、 网易基于 HBase 的最佳实践

Apache Kafka 版本演进及特性介绍

如果您喜欢这篇文章,点【在看】与转发都是一种鼓励,期待得到您的认可 ❥(^_-)

查看原文: Apache Kafka 版本演进及特性介绍

  • purplegorilla
  • CarnegieTyler
  • GabrielTony
  • BradleyMoore
  • MortonBonnie
需要 登录 后回复方可回复, 如果你还没有账号你可以 注册 一个帐号。