猜你喜欢
深入理解Kafka与Pulsar:消息流平台的实践与剖析

深入理解Kafka与Pulsar:消息流平台的实践与剖析

书籍作者:梁国斌 ISBN:9787121440014
书籍语言:简体中文 连载状态:全集
电子书格式:pdf,txt,epub,mobi,azw3 下载次数:4609
创建日期:2023-04-25 发布日期:2023-04-25
运行环境:PC/Windows/Linux/Mac/IOS/iPhone/iPad/Kindle/Android/安卓/平板
内容简介

本书详细介绍了Kafka与Pulsar的使用方式,并深入分析了它们的实现机制。通过阅读本书,读者可以快速入门和使用Kafka与Pulsar,并深入理解它们的实现原理。

本书通过大量实践示例介绍了Kafka与Pulsar的使用方式,包括管理脚本与客户端(生产者、消费者)的使用方式、关键的配置项、ACK提交方式等基础应用,以及安全机制、跨地域复制机制、连接器/流计算引擎、常用监控管理平台等高级应用。这些内容可以帮助读者深入掌握Kafka与Pulsar的使用方式,并完成日常管理工作。另外,本书深入分析了Kafka与Pulsar的实现原理,包括客户端(生产者、消费者)的设计与实现、Broker网络模型、主题(分区)分配与负载均衡机制,以及磁盘存储与性能优化方案、数据同步机制、扩容与故障转移机制。最后,本书介绍了Kafka与Pulsar的事务机制,并深入分析了Kafka事务的实现及Kafka的分布式协作组件KRaft模块。这部分内容可以帮助读者轻松理解Kafka与Pulsar的架构设计与实现原理。


作者简介

后端高级开发,源码爱好者,对Netty、Spring、Redis、Kafka、Pulsar等中间件有深入研究,技术公众号binecy作者。

编辑推荐
适读人群 :Kafka、Pulsar的专业技术人员。 大数据相关应用的开发者、运维者和爱好者。

通过大量实践示例展示Kafka与Pulsar的使用方式,以帮助读者日常使用、管理Kafka与Pulsar。

提炼核心代码,并配以适量图文,对Kafka与Pulsar的源码及实现逻辑进行了详细说明。


前言

本书将向读者介绍两个优秀的分布式消息流平台:Kafka与Pulsar。Kafka使用Scala和Java编写,由LinkedIn公司开源,当下已成为最流行的分布式消息流平台之一。Kafka基于发布/订阅模式,具有高吞吐、可持久化、可水平扩展、支持流数据处理等特性。Pulsar是雅虎开源的“下一代云原生分布式消息流平台”,目前在快速发展中。Pulsar集消息、存储、轻量化函数式计算为一体,采用计算与存储分离架构设计,支持多租户、持久化存储、跨地域数据复制,具有强一致性、高吞吐、低延时及高可扩展性等流数据存储特性。

写作目的

在了解Kafka与Pulsar的特性与设计后,笔者被Kafka和Pulsar优秀的架构设计所吸引。实现一个分布式消息流平台,必须考虑数据分区(分片)、数据同步、数据自动均衡、分布式协作等问题。而针对这些问题,Kafka与Pulsar提供了非常优秀的设计方案,非常值得我们深入学习,所以笔者深入分析了Kafka与Pulsar这两个消息流平台,并编写了本书。

本书结构

本书从Kafka与Pulsar的基础概念切入,通过大量实践示例向读者展示Kafka与Pulsar的使用方式,以帮助读者日常使用、管理Kafka与Pulsar。另外,本书通过提取Kafka与Pulsar的核心代码(本书会尽量避免堆积代码),并配以适量图文,对Kafka与Pulsar的源码及实现逻辑进行了详细说明,从而带领读者阅读源码,帮助读者理解Kafka与Pulsar的设计思路和实现原理,还可以帮助读者在学习或设计其他分布式系统、存储系统时对这些设计思路融会贯通、触类旁通。

勘误和支持

若读者在阅读本书的过程中有任何问题或者建议,可以关注笔者的公众号(binecy)与笔者交流。我们十分感谢并重视读者的反馈,会对读者提出的问题、建议进行梳理与反馈,并在本书后续版本中及时做出勘误与更新。

梁国斌


目录

第1部分 基础应用
第1章 Kafka与Pulsar概述
1.1 简介
1.2 特性
1.3 概念
1.3.1 Kafka基础概念
1.3.2 Pulsar基础概念
1.4 本章总结
第2章 Kafka的部署与调试
2.1 安装Kafka集群
2.1.1 部署ZooKeeper集群
2.1.2 部署Kafka集群
2.2 调试Kafka
2.3 本章总结
第3章 Kafka的应用
3.1 脚本
3.1.1 主题管理
3.1.2 生产者与消费者
3.1.3 动态配置
3.2 客户端
3.2.1 生产者
3.2.2 消费者
3.3 消息序列化
3.4 配额
3.5 本章总结
第4章 Pulsar的部署与调试
4.1 本地部署
4.2 集群部署
4.2.1 ZooKeeper集群部署
4.2.2 初始化集群元数据
4.2.3 部署BookKeeper集群
4.2.4 部署Pulsar Broker
4.3 调试Pulsar
4.3.1 调试Pulsar Broker源码
4.3.2 调试BookKeeper
4.4 本章总结
第5章 Pulsar的应用
5.1 租户
5.2 命名空间
5.2.1 消息保留和过期
5.2.2 持久化策略
5.2.3 消息投递速率
5.3 主题
5.3.1 创建主题
5.3.2 发送、消费消息
5.3.3 管理主题
5.4 客户端
5.4.1 生产者
5.4.2 消费者
5.5 Schema
5.5.1 Schema的类型与使用示例
5.5.2 Schema演化与兼容
5.5.3 管理Schema
5.6 资源隔离
5.6.1 Broker隔离
5.6.2 Bookie隔离
5.7 兼容Kafka客户端
5.8 BookKeeper使用示例
5.9 本章总结
第2部分 客户端与Broker计算层
第6章 Kafka和Pulsar的架构
6.1 ZooKeeper的作用
6.2 Kafka的架构设计
6.2.1 元数据管理
6.2.2 发布/订阅模式
6.2.3 磁盘存储的设计与优化
6.2.4 数据副本
6.2.5 系统伸缩
6.2.6 故障转移
6.3 Pulsar的架构设计
6.3.1 Pulsar的计算层
6.3.2 Pulsar的存储层
6.3.3 系统伸缩
6.3.4 故障转移
6.4 源码架构
6.4.1 Kafka
6.4.2 Pulsar
6.4.3 BookKeeper
6.5 本章总结
第7章 Kafka的主题
7.1 CreateTopics请求的处理流程
7.1.1 创建主题
7.1.2 分区副本分配规则
7.1.3 存储主题元数据
7.2 KafkaController处理新主题
7.3 本章总结
第8章 Kafka的生产者与消息发布
8.1 生产者发送消息
8.1.1 消息发送流程
8.1.2 消息累积器与消息批次
8.1.3 Sender线程
8.1.4 TCP通信协议
8.1.5 元数据刷新机制
8.2 Broker接收消息
8.2.1 Broker处理消息流程
8.2.2 延迟操作与时间轮
8.3 本章总结
第9章 Kafka的消费者与消息订阅
9.1 消费组协作机制
9.1.1 分区分配器
9.1.2 重平衡的设计
9.1.3 实战:使用CooperativeStickyAssignor分区分配器
9.1.4 重平衡的实现
9.2 心跳与元数据更新
9.3 ACK管理
9.3.1 消费者初始化偏移量
9.3.2 ACK偏移量的提交与存储
9.4 读取消息
9.4.1 消费者发送Fetch请求
9.4.2 Broker处理Fetch请求
9.5 本章总结
第10章 Pulsar的主题
10.1 租户与命名空间
10.2 主题
10.2.1 创建主题
10.2.2 初始化主题
10.2.3 绑定主题
10.3 Broker负载均衡
10.3.1 负载报告上传
10.3.2 为bundle选择Broker节点
10.4 bundle管理
10.4.1 选举leader节点
10.4.2 bundle卸载机制
10.4.3 bundle切分机制
10.5 本章总结
第11章 Pulsar的生产者与消息发布
11.1 生产者发送消息
11.1.1 初始化生产者
11.1.2 生产者发送消息流程
11.2 Broker处理消息
11.2.1 写入消息
11.2.2 切换Ledger
11.3 本章总结
第12章 Pulsar的消费者与消息订阅
12.1 消费者订阅消息
12.1.1 消费者的初始化
12.1.2 接收消息
12.1.3 确认超时与取消确认
12.2 Broker读取与推送消息
12.2.1 处理Subscribe请求
12.2.2 推送消息
12.3 ACK机制
12.3.1 ACK机制的设计
12.3.2 ACK机制的实现
12.4 消息清除
12.4.1 历史消息清除
12.4.2 清除backlog消息
12.4.3 清除过期数据
12.5 本章总结
第3部分 分布式数据存储
第13章 Kafka存储机制与读写流程
13.1 数据存储机制的设计
13.2 消息写入流程
13.3 消息读取流程
13.4 日志管理
13.4.1 日志加载
13.4.2 日志刷盘
13.4.3 数据清理
13.4.4 数据去重
13.5 本章总结
第14章 Kafka主从同步
14.1 成为leader/follow副本
14.2 follow副本同步流程
14.2.1 同步流程与数据一致性
14.2.2 LeaderEpoch机制
14.2.3 follow副本拉取消息
14.3 leader副本更新
14.3.1 更新ISR集合
14.3.2 更新高水位
14.4 本章总结
第15章 Kafka分布式协同
15.1 KafkaController选举
15.1.1 KafkaController元数据
15.1.2 ControllerEpoch机制
15.1.3 选举流程
15.2 ZooKeeper监控机制
15.3 故障转移
15.3.1 分区、副本状态机
15.3.2 分区状态切换流程
15.3.3 副本状态切换流程
15.4 实战:Preferred Replica重平衡
15.5 实战:增加分区数量
15.6 实战:Kafka集群扩容
15.7 本章总结
第16章 BookKeeper客户端
16.1 客户端设计
16.2 客户端写入
16.2.1 Ledger创建流程
16.2.2 数据写入流程
16.2.3 处理写入结果
16.2.4 故障转移
16.2.5 LAC上报
16.2.6 限制生产者数量
16.3 客户端读取
16.3.1 消费者读取数据
16.3.2 客户端Recover
16.4 本章总结
第17章 BookKeeper服务端
17.1 Bookie设计
17.2 Bookie写入流程
17.2.1 Bookie初始化
17.2.2 Journal写入流程
17.2.3 Ledger写入流程
17.2.4 Ledger的数据存储格式
17.3 Bookie读取数据
17.4 Bookie数据清除
17.5 Bookie Recovery
17.5.1 Auditor
17.5.2 ReplicationWorker
17.6 本章总结
第4部分 事务与KRaft模块
第18章 Kafka与Pulsar事务概述
18.1 为什么需要事务
18.1.1 幂等发送
18.1.2 事务保证
18.2 Kafka事务应用示例
18.3 Pulsar事务应用示例
18.4 本章总结
第19章 Kafka事务的设计与实现
19.1 Kafka的事务设计
19.2 事务初始化流程
19.2.1 事务定义
19.2.2 生产者初始化事务
19.2.3 生产者启动事务
19.3 事务消息发送与处理流程
19.3.1 事务分区发送与处理流程
19.3.2 生产者发送事务消息
19.3.3 Broker处理事务消息
19.3.4 ACK偏移量发送与处理流程
19.4 事务提交流程
19.4.1 生产者提交事务
19.4.2 协调者完成事务
19.5 本章总结
第20章 KRaft模块概述
20.1 为什么要移除ZooKeeper
20.2 部署与调试KRaft模块
20.3 Raft算法
20.3.1 leader选举
20.3.2 日志复制
20.3.3 安全性
20.4 本章总结
第21章 KRaft模块的设计与实现原理
21.1 KRaft请求处理流程
21.1.1 Raft状态
21.1.2 Raft请求类型
21.1.3 处理Raft请求
21.2 KRaft leader选举机制
21.2.1 初始化Raft状态
21.2.2 发送投票请求
21.2.3 投票流程
21.2.4 当选leader节点
21.3 KRaft生成Record数据
21.4 KRaft数据存储机制
21.5 KRaft数据同步机制
21.6 KRaft提交Record数据
21.6.1 监听器机制
21.6.2 BrokerMetadataListener
21.6.3 QuorumMetaLogListener
21.7 KRaft节点监控与故障转移机制
21.7.1 节点注册
21.7.2 心跳请求
21.7.3 故障转移
21.8 KRaft数据清理机制
21.8.1 快照管理
21.8.2 历史数据清理
21.9 本章总结
第5部分 高级应用
第22章 安全
22.1 TLS加密
22.1.1 准备TLS证书和密钥
22.1.2 Kafka配置
22.1.3 Pulsar配置
22.2 认证与授权
22.2.1 Kafka SCRAM认证与授权
22.2.2 Pulsar JWT认证与授权
22.3 本章总结
第23章 跨地域复制与分层存储
23.1 跨地域复制
23.1.1 MirrorMaker
23.1.2 Pulsar跨地域复制机制
23.2 分层存储
23.3 本章总结
第24章 监控与管理
24.1 Kafka监控与管理平台
24.1.1 Kafka监控
24.1.2 Kafka管理平台
24.2 Pulsar监控与管理平台
24.2.1 Pulsar监控
24.2.2 Pulsar管理平台
24.3 本章总结
第25章 连接器
25.1 Kafka Connect
25.1.1 应用示例
25.1.2 开发实践
25.2 Pulsar IO
25.2.1 应用示例
25.2.2 开发实践
25.3 本章总结
第26章 流计算引擎
26.1 Kafka Stream
26.1.1 应用示例
26.1.2 时间窗口
26.1.3 语义保证和线程模型
26.2 Pulsar Function
26.2.1 应用示例
26.2.2 部署
26.2.3 时间窗口
26.2.4 Function运行模式和消息语义保证
26.3 本章总结

短评

这本书比较了kafka和pulsar这两个比较有名的事件代理 比较全面 对于开发者深入了解很有帮助

2022-08-31 23:29:14

产品特色