Kafka技术内幕——图文详解Kafka源码设计与实现


引言

Apache Kafka (简称Kafka )最早是由LinkedIn开源出来的分布式消息系统,现在是Apache旗下的一个子项目,并且已经成为开源领域应用最广泛的消息系统之一。Kafka社区 也非常活跃,从0.9版本开始,Kafka的标语已经从“一个高吞吐量、分布式的消息系统”改为“一个分布式的流平台”。Kafka自LinkedIn 开源以来就以高性能、高吞吐量、分布式的特性著称。本书以0.10版本的源码为基础,深入分析了Kafka 的设计与实现,包括生产者和消费者的消息处理流程,新旧消费者不同的设计方式,存储层的实现,协调者和控制器如何确保Kafka集群的分布式和容错特性,两种同步集群工具MirrorMaker和uReplicator,流处理的两种API以及Kafka的些高级特性等 。本书适合Kafka开发人员阅读。

书本主页

Kafka技术内幕——图文详解Kafka源码设计与实现

 

书本目录

Kafka技术内幕——图文详解Kafka源码设计与实现

 


生产者:从一个生产者的示例开始,引出了新版本生产者的两种消息发送方式。生产者客户端通过记录收集器和发送线程,对消息集进行分组和缓存,并为目标节点创建生产请求,发送到不同的代理节点。接着介绍了与网络相关的Kafka通道、选择器、轮询等NIO操作。另外,还介绍了Scala版本的旧生产者,它使用阻塞通道的方式发送请求。最后,介绍了服务端采用
Reactor模式处理客户端的请求。

Kafka技术内幕——图文详解Kafka源码设计与实现

 


消费者:高级API和低级API:首先介绍了消费者相关的基础概念,然后从一个消费者的示例开始,引出了基于
ZooKeeper (后面简称ZK )的高级消费者API。要理解高级API,"主要是要理解消费线程的模型以及变量的传递方式。接着介绍了消费者提交分区偏移量的两种方式。最后,我们举了一个低级API的示例。开发者需要自己实现一些比较复 杂的逻辑处理,才能保证消费程序的健壮性和稳定性。

Kafka技术内幕——图文详解Kafka源码设计与实现

 


新消费者:介绍了新版本的消费者。不同于旧版本的消费者,新版本去除了ZK的依赖,统一了旧版本的高级API和低级API,并提供了两种消费方式:订阅和分配。新版本引入订阅状态来管理消费者的订阅信息,并使用拉取器拉取消息。新版本的消费者没有使用拉取线程,而是采用轮询的方式拉取消息,它的性能比旧版本的消费者更好。另外,还介绍了消费者采用回调器、处理器、监听器、适配器、组合模式和链式调用等实现不同类型的异步请求。最后,我们介绍了新消费者的心跳任务、消费者提交偏移量以及3种消息处理语义的使用方式。

Kafka技术内幕——图文详解Kafka源码设计与实现

 


协调者:介绍了新版本消费者相关的协调者实现,主要包括“加入组”与“同步组"。每个消费者都有一个客户端的协调者,服务端也有一个清费组级别的协调者负责处理所有消费者客户端的请求。当消费组触发再平衡操作时,服务端的协调者会记录消费组元数据的变化,并通过状态机保证消费组状态的正常转换。本章会通过很多不同的示例场景来帮助读者理解消费组相关的实现。

Kafka技术内幕——图文详解Kafka源码设计与实现

 


存储层:介绍了Kafka的存储层实现,包括读写、管理、压缩等.一些常用的日志操作。服务端通过副本管理器处理客户端的生产请求和拉取请求。接着介绍了副本机制相关的分区、副本、最高水位、复制点等一些概念。最后,介绍了延迟操作接口与延迟缓存。服务端如果不能立即返回响应结果给客户端,会先将延迟操作缓存起来,直到请求处理完成或超时。

Kafka技术内幕——图文详解Kafka源码设计与实现

 


控制器:介绍了作为服务端核心的Kaka控制器,它主要负责管理分区状态机和副本状态机,以及多种类型的监听器,比如代理节点上线和下线、删除主题、重新分配分区等。控制器的个重要职责是选举分区的主副本。不同代理节点根据控制器下发的请求,决定成为分区的主副本还是备份副本。另外,我们还分析了本地副本与远程副本的区别,以及元数据缓存的作用。

Kafka技术内幕——图文详解Kafka源码设计与实现

 


基于Kafka构建数据流管道:首先介绍了两种集群的同步工具: Karka内置的MirorMaker 和Uber开源的uReplicator.接着,介绍了新版本Kafka提供的连接器框架,以及如何开发一一个 自定义的连接器。最后,介绍了连接器的架构模型的具体实现,主要包括数据模型,Conector模 型和Worker模型。

Kafka技术内幕——图文详解Kafka源码设计与实现

 


Kafka流处理:介绍了Kafka流处理的两种API:低级Pocessor API和高级DSL。这一章重点介绍了流处理的线程模型,主要包括流实例、流线程和流任务。我们还介绍了流处理的本地状态存储,它主要用来作为备份任务的数据恢复。高级DSL包括两个组件-- KStrean 与KTable,它们都定义了一些常用的流处理算子操作,比如无状态的操作(过滤和映射等)、有状态的操作(连
接和窗口等)。

Kafka技术内幕——图文详解Kafka源码设计与实现

 


高级特性介绍:介绍了Kafka的一些高级特性,比如客户端的配额、新的消息格式和事务特性。

Kafka技术内幕——图文详解Kafka源码设计与实现

 

如何获取

点点这个链接免费获取:本人免费整理了Java高级资料,涵盖了Java、Redis、MongoDB、MySQL、Zookeeper、Spring Cloud、Dubbo高并发分布式等教程,一共30G,需要自己领取。
传送门:https://mp.weixin.qq.com/s/osB-BOl6W-ZLTSttTkqMPQ


作者:Myname。,发布于:2020/03/26
原文:https://www.cnblogs.com/yunxi520/p/12559883.html