最近,confluent社区发表了一篇文章,主要讲述了Kafka未来的2.8版本将要放弃Zookeeper,这对于Kafka用户来说,是一个重要的改进。之前部署Kafka就必须得部署Zookeeper,而之后就只要单独部署Kafka就行了。[1]
1.Kafka简介
Apache Kafka最早是由Linkedin公司开发,后来捐献给了Apack基金会。
Kafka被官方定义为分布式流式处理平台,因为具备高吞吐、可持久化、可水平扩展等特性而被广泛使用。目前Kafka具体如下功能:
- 消息队列,
Kafka具有系统解耦、流量削峰、缓冲、异步通信等消息队列的功能。 - 分布式存储系统,
Kafka可以把消息持久化,同时用多副本来实现故障转移,可以作为数据存储系统来使用。 - 实时数据处理,
Kafka提供了一些和数据处理相关的组件,比如Kafka Streams、Kafka Connect,具备了实时数据的处理功能。
下面这张图是Kafka的消息模型:[2]

通过上面这张图,介绍一下Kafka中的几个主要概念:
producer和consumer: 消息队列中的生产者和消费者,生产者将消息推送到队列,消费者从队列中拉取消息。consumer group:消费者集合,这些消费者可以并行消费同一个topic下不同partition中的消息。broker:Kafka集群中的服务器。topic:消息的分类。partition:topic物理上的分组,一个topic可以有partition,每个partition中的消息会被分配一个有序的id作为offset。每个consumer group只能有一个消费者来消费一个partition。
2.Kafka和Zookeeper关系
Kafka架构如下图:

从图中可以看到,Kafka的工作需要Zookeeper的配合。那他们到底是怎么配合工作呢?
看下面这张图:

2.1 注册中心









所以,Kafka单集群承载的分区数量是一个瓶颈。而这又恰恰是一些业务场景需要的。
5.升级
升级前后的架构图对比如下:


6.总结
在大规模集群和云原生的背景下,使用Zookeeper给Kafka的运维和集群性能造成了很大的压力。去除Zookeeper是必然趋势,这也符合大道至简的架构思想。


