具体描述
《Apache Kafka实战》是涵盖Apache Kafka各方面的具有实践指导意义的工具书和参考书。作者结合典型的使用场景,对Kafka整个技术体系进行了较为全面的讲解,以便读者能够举一反三,直接应用于实践。同时,本书还对Kafka的设计原理及其流式处理组件进行了较深入的探讨,并给出了翔实的案例。
《Apache Kafka实战》共分为10章:第1章全面介绍消息引擎系统以及Kafka的基本概念与特性,快速带领读者走进Kafka的世界;第2章简要回顾了Apache Kafka的发展历史;第3章详细介绍了Kafka集群环境的搭建;第4、5章深入探讨了Kafka客户端的使用方法;第6章带领读者一览Kafka内部设计原理;第7~9章以实例的方式讲解了Kafka集群的管理、监控与调优;第10章介绍了Kafka新引入的流式处理组件。
《Apache Kafka实战》适合所有对云计算、大数据处理感兴趣的技术人员阅读,尤其适合对消息引擎、流式处理技术及框架感兴趣的技术人员参考阅读。
作者简介
胡夕,8年分布式系统架构和开发经验,曾负责IBM重要产品的研发和技术支持。在搜狗任职期间主导构建了大数据分布式流式处理平台,为实时提供业务决策提供了重要支撑。后在微博带领团队参与构建了微博混合云项目核心模块的设计与研发,成功应对春晚峰值流量。
目录信息
1.1 Kafka快速入门 1
1.1.1 下载并解压缩Kafka二进制代码压缩包文件 2
1.1.2 启动服务器 3
1.1.3 创建topic 3
1.1.4 发送消息 4
1.1.5 消费消息 4
1.2 消息引擎系统 5
1.2.1 消息设计 6
1.2.2 传输协议设计 6
1.2.3 消息引擎范型 6
1.2.4 Java消息服务 8
1.3 Kafka概要设计 8
1.3.1 吞吐量/延时 8
1.3.2 消息持久化 11
1.3.3 负载均衡和故障转移 12
1.3.4 伸缩性 13
1.4 Kafka基本概念与术语 13
1.4.1 消息 14
1.4.2 topic和partition 16
1.4.3 offset 17
1.4.4 replica 18
1.4.5 leader和follower 18
1.4.6 ISR 19
1.5 Kafka使用场景 20
1.5.1 消息传输 20
1.5.2 网站行为日志追踪 20
1.5.3 审计数据收集 20
1.5.4 日志收集 20
1.5.5 Event Sourcing 21
1.5.6 流式处理 21
1.6 本章小结 21
第2章 Kafka发展历史 22
2.1 Kafka的历史 22
2.1.1 背景 22
2.1.2 Kafka横空出世 23
2.1.3 Kafka开源 24
2.2 Kafka版本变迁 25
2.2.1 Kafka的版本演进 25
2.2.2 Kafka的版本格式 26
2.2.3 新版本功能简介 26
2.2.4 旧版本功能简介 31
2.3 如何选择Kafka版本 35
2.3.1 根据功能场景 35
2.3.2 根据客户端使用场景 35
2.4 Kafka与Confluent 36
2.5 本章小结 37
第3章 Kafka线上环境部署 38
3.1 集群环境规划 38
3.1.1 操作系统的选型 38
3.1.2 磁盘规划 40
3.1.3 磁盘容量规划 42
3.1.4 内存规划 43
3.1.5 CPU规划 43
3.1.6 带宽规划 44
3.1.7 典型线上环境配置 45
3.2 伪分布式环境安装 45
3.2.1 安装Java 46
3.2.2 安装ZooKeeper 47
3.2.3 安装单节点Kafka集群 48
3.3 多节点环境安装 49
3.3.1 安装多节点ZooKeeper集群 50
3.3.2 安装多节点Kafka 54
3.4 验证部署 55
3.4.1 测试topic创建与删除 55
3.4.2 测试消息发送与消费 57
3.4.3 生产者吞吐量测试 58
3.4.4 消费者吞吐量测试 58
3.5 参数设置 59
3.5.1 broker端参数 59
3.5.2 topic级别参数 62
3.5.3 GC参数 63
3.5.4 JVM参数 64
3.5.5 OS参数 64
3.6 本章小结 65
第4章 producer开发 66
4.1 producer概览 66
4.2 构造producer 69
4.2.1 producer程序实例 69
4.2.2 producer主要参数 75
4.3 消息分区机制 80
4.3.1 分区策略 80
4.3.2 自定义分区机制 80
4.4 消息序列化 83
4.4.1 默认序列化 83
4.4.2 自定义序列化 84
4.5 producer拦截器 87
4.6 无消息丢失配置 90
4.6.1 producer端配置 91
4.6.2 broker端配置 92
4.7 消息压缩 92
4.7.1 Kafka支持的压缩算法 93
4.7.2 算法性能比较与调优 93
4.8 多线程处理 95
4.9 旧版本producer 96
4.10 本章小结 98
第5章 consumer开发 99
5.1 consumer概览 99
5.1.1 消费者(consumer) 99
5.1.2 消费者组(consumer group) 101
5.1.3 位移(offset) 102
5.1.4 位移提交 103
5.1.5 __consumer_offsets 104
5.1.6 消费者组重平衡(consumer group rebalance) 106
5.2 构建consumer 106
5.2.1 consumer程序实例 106
5.2.2 consumer脚本命令 111
5.2.3 consumer主要参数 112
5.3 订阅topic 115
5.3.1 订阅topic列表 115
5.3.2 基于正则表达式订阅topic 115
5.4 消息轮询 115
5.4.1 poll内部原理 115
5.4.2 poll使用方法 116
5.5 位移管理 118
5.5.1 consumer位移 119
5.5.2 新版本consumer位移管理 120
5.5.3 自动提交与手动提交 121
5.5.4 旧版本consumer位移管理 123
5.6 重平衡(rebalance) 123
5.6.1 rebalance概览 123
5.6.2 rebalance触发条件 124
5.6.3 rebalance分区分配 124
5.6.4 rebalance generation 126
5.6.5 rebalance协议 126
5.6.6 rebalance流程 127
5.6.7 rebalance监听器 128
5.7 解序列化 130
5.7.1 默认解序列化器 130
5.7.2 自定义解序列化器 131
5.8 多线程消费实例 132
5.8.1 每个线程维护一个KafkaConsumer 133
5.8.2 单KafkaConsumer实例+多worker线程 135
5.8.3 两种方法对比 140
5.9 独立consumer 141
5.10 旧版本consumer 142
5.10.1 概览 142
5.10.2 high-level consumer 143
5.10.3 low-level consumer 147
5.11 本章小结 153
第6章 Kafka设计原理 154
6.1 broker端设计架构 154
6.1.1 消息设计 155
6.1.2 集群管理 166
6.1.3 副本与ISR设计 169
6.1.4 水印(watermark)和leader epoch 174
6.1.5 日志存储设计 185
6.1.6 通信协议(wire protocol) 194
6.1.7 controller设计 205
6.1.8 broker请求处理 216
6.2 producer端设计 219
6.2.1 producer端基本数据结构 219
6.2.2 工作流程 220
6.3 consumer端设计 223
6.3.1 consumer group状态机 223
6.3.2 group管理协议 226
6.3.3 rebalance场景剖析 227
6.4 实现精确一次处理语义 230
6.4.1 消息交付语义 230
6.4.2 幂等性producer(idempotent producer) 231
6.4.3 事务(transaction) 232
6.5 本章小结 234
第7章 管理Kafka集群 235
7.1 集群管理 235
7.1.1 启动broker 235
7.1.2 关闭broker 236
7.1.3 设置JMX端口 237
7.1.4 增加broker 238
7.1.5 升级broker版本 238
7.2 topic管理 241
7.2.1 创建topic 241
7.2.2 删除topic 243
7.2.3 查询topic列表 244
7.2.4 查询topic详情 244
7.2.5 修改topic 245
7.3 topic动态配置管理 246
7.3.1 增加topic配置 246
7.3.2 查看topic配置 247
7.3.3 删除topic配置 248
7.4 consumer相关管理 248
7.4.1 查询消费者组 248
7.4.2 重设消费者组位移 251
7.4.3 删除消费者组 256
7.4.4 kafka-consumer-offset-checker 257
7.5 topic分区管理 258
7.5.1 preferred leader选举 258
7.5.2 分区重分配 260
7.5.3 增加副本因子 263
7.6 Kafka常见脚本工具 264
7.6.1 kafka-console-producer脚本 264
7.6.2 kafka-console-consumer脚本 265
7.6.3 kafka-run-class脚本 267
7.6.4 查看消息元数据 268
7.6.5 获取topic当前消息数 270
7.6.6 查询__consumer_offsets 271
7.7 API方式管理集群 273
7.7.1 服务器端API管理topic 273
7.7.2 服务器端API管理位移 275
7.7.3 客户端API管理topic 276
7.7.4 客户端API查看位移 280
7.7.5 0.11.0.0版本客户端API 281
7.8 MirrorMaker 285
7.8.1 概要介绍 285
7.8.2 主要参数 286
7.8.3 使用实例 287
7.9 Kafka安全 288
7.9.1 SASL+ACL 289
7.9.2 SSL加密 297
7.10 常见问题 301
7.11 本章小结 304
第8章 监控Kafka集群 305
8.1 集群健康度检查 305
8.2 MBean监控 306
8.2.1 监控指标 306
8.2.2 指标分类 308
8.2.3 定义和查询JMX端口 309
8.3 broker端JMX监控 310
8.3.1 消息入站/出站速率 310
8.3.2 controller存活JMX指标 311
8.3.3 备份不足的分区数 312
8.3.4 leader分区数 312
8.3.5 ISR变化速率 313
8.3.6 broker I/O工作处理线程空闲率 313
8.3.7 broker网络处理线程空闲率 314
8.3.8 单个topic总字节数 314
8.4 clients端JMX监控 314
8.4.1 producer端JMX监控 314
8.4.2 consumer端JMX监控 316
8.5 JVM监控 317
8.5.1 进程状态 318
8.5.2 GC性能 318
8.6 OS监控 318
8.7 主流监控框架 319
8.7.1 JmxTool 320
8.7.2 kafka-manager 320
8.7.3 Kafka Monitor 325
8.7.4 Kafka Offset Monitor 327
8.7.5 CruiseControl 329
8.8 本章小结 330
第9章 调优Kafka集群 331
9.1 引言 331
9.2 确定调优目标 333
9.3 集群基础调优 334
9.3.1 禁止atime更新 335
9.3.2 文件系统选择 335
9.3.3 设置swapiness 336
9.3.4 JVM设置 337
9.3.5 其他调优 337
9.4 调优吞吐量 338
9.5 调优延时 342
9.6 调优持久性 343
9.7 调优可用性 347
9.8 本章小结 349
第10章 Kafka Connect与Kafka Streams 350
10.1 引言 350
10.2 Kafka Connect 351
10.2.1 概要介绍 351
10.2.2 standalone Connect 353
10.2.3 distributed Connect 356
10.2.4 开发connector 359
10.3 Kafka Streams 362
10.3.1 流处理 362
10.3.2 Kafka Streams核心概念 364
10.3.3 Kafka Streams与其他框架的异同 368
10.3.4 Word Count实例 369
10.3.5 Kafka Streams应用开发 372
10.3.6 Kafka Streams状态查询 382
10.4 本章小结 386
· · · · · · (收起)
读后感
非常全面的介绍了kafka的原理、API、运维知识,既可以当做参考手册使用,又可以作为深入学习kafka的书籍。 作者对技术的了解还是有一定深度和广度的,对于kafka涉及的技术原理还做了适当展开,比如IO模型(零拷贝)、硬件架构、软件架构,通过此书还可以学到kafka之外的很多知...
非常全面的介绍了kafka的原理、API、运维知识,既可以当做参考手册使用,又可以作为深入学习kafka的书籍。 作者对技术的了解还是有一定深度和广度的,对于kafka涉及的技术原理还做了适当展开,比如IO模型(零拷贝)、硬件架构、软件架构,通过此书还可以学到kafka之外的很多知...
非常全面的介绍了kafka的原理、API、运维知识,既可以当做参考手册使用,又可以作为深入学习kafka的书籍。 作者对技术的了解还是有一定深度和广度的,对于kafka涉及的技术原理还做了适当展开,比如IO模型(零拷贝)、硬件架构、软件架构,通过此书还可以学到kafka之外的很多知...
非常全面的介绍了kafka的原理、API、运维知识,既可以当做参考手册使用,又可以作为深入学习kafka的书籍。 作者对技术的了解还是有一定深度和广度的,对于kafka涉及的技术原理还做了适当展开,比如IO模型(零拷贝)、硬件架构、软件架构,通过此书还可以学到kafka之外的很多知...
非常全面的介绍了kafka的原理、API、运维知识,既可以当做参考手册使用,又可以作为深入学习kafka的书籍。 作者对技术的了解还是有一定深度和广度的,对于kafka涉及的技术原理还做了适当展开,比如IO模型(零拷贝)、硬件架构、软件架构,通过此书还可以学到kafka之外的很多知...
用户评价
这本书的作者显然是深谙这个领域的资深人士,从行文的逻辑梳理上就能明显感受到那种经验的沉淀。尤其是在讲解一些复杂的数据一致性和分区策略时,作者没有采用过于晦涩的术语堆砌,而是通过生活化的比喻和层层递进的分析,将原本抽象的概念变得具象化和易于理解。这种叙事方式极大地降低了学习曲线,使得那些原本让我感到棘手的技术难点,在阅读完相关章节后豁然开朗。我尤其欣赏作者在穿插讨论业界最佳实践时的那种毫不保留的态度,这不仅仅是技术手册,更像是一份由实战专家亲手撰写的“避坑指南”。阅读过程中,我时不时会停下来,对着书本上的关键论述反复揣摩,感觉自己的技术视野正在被这本书不断拓宽和深化,仿佛在与一位耐心的导师进行一对一的深度交流。
坦白讲,市面上关于这类技术栈的书籍汗牛充栋,很多都只是对官方文档的简单重述,读起来枯燥乏味,难以坚持。然而,这本书给我最大的惊喜在于其内容组织的“跳跃性”——它总能在你以为要陷入纯理论泥潭时,及时抛出一个紧密结合生产环境的性能调优案例。比如,关于Broker的参数调优那几章,它没有停留在告诉你“应该设置多少”,而是详细分析了不同硬件配置和业务负载下,参数变动如何影响延迟和吞吐量的底层原理,甚至还附带了详细的监控指标解读。这种深入骨髓的洞察力,远超出了我对一本技术专著的初始预期。这本书的价值,不在于教会你如何“运行”Kafka,而在于指导你如何“驯服”Kafka,让它在你的系统中发挥出最大的效能,那种务实的精神是极其宝贵的。
这本书的包装设计着实吸引人,封面采用了深邃的蓝色调,搭配着富有科技感的抽象线条,让人在书店里一眼就能注意到它。拿到手里分量十足,纸张的质感也很不错,印刷清晰,阅读起来非常舒适。从目录上看,内容涵盖的广度令人印象深刻,从Kafka的基础概念到高级应用场景,似乎都做了比较深入的探讨。我特别期待它在实际案例分析方面的表现,毕竟理论知识再扎实,也需要落地的经验来支撑。这本书的排版布局也比较用心,代码示例清晰易读,逻辑流程图直观明了,这对于初学者来说无疑是极大的帮助。希望这本书真的能成为我深入理解和应用分布式流处理技术的得力助手,而不是仅仅停留在理论的表面。总体而言,初步印象是非常积极的,它散发着一种专业而严谨的气息,让人对即将展开的阅读之旅充满期待和信心。
翻阅全书,我发现作者在细节处理上展现了极高的专业素养。它没有放过任何一个可能引发混淆的边缘情况。例如,在讨论消息的顺序性保证时,书中不仅讲解了分区级别的保证,还清晰地阐述了在多副本同步机制下,不同写入模式对强一致性保证的影响,并给出了明确的工程取舍建议。对于阅读者而言,这种对边界条件的关注,意味着我们能更少地在实际部署中遭遇那些“文档里没写”的怪异问题。再者,书中的示例代码质量非常高,结构清晰,注释精炼,可以直接作为参考蓝本来使用,而非仅仅是配合文字阅读的“装饰品”。这种对实践价值的极致追求,使得这本书的阅读体验充满了“可操作性”,每读完一章,都能立即找到对应的技术点去实践和验证。
这本书的阅读体验,就像是跟随一位经验丰富的老工程师进行了一次密集的系统架构复盘会。它的叙事节奏把握得非常好,在需要快速建立宏观认知时,它用简洁的图表和概括性的语言迅速铺陈全局;而在需要攻克技术难关时,它又会沉下心来,用详尽的源码级别分析来剖开问题的本质。最让我感到赞叹的是,书中对于“为什么”的探讨远多于“是什么”的罗列。它不仅告诉你某个组件是如何工作的,更重要的是揭示了它当初被设计成这样背后的工程权衡和历史背景,这使得我对整个架构的理解不再是零散的知识点拼接,而是一个有机、有生命力的系统。这本书无疑是为那些渴望从“使用者”晋升为“架构师”的工程师量身打造的,它提供的知识深度和广度,足以支撑起复杂分布式系统的设计与维护。
五星好评,虽然版本比较旧了,但是原理讲的由浅入深,我这种小白也看的津津有味。
这书写的不错,不水,有作者自己的经验。
工具+案头书。作者除了介绍Kafka相关概念外,也讲解了许多经自身实战的Best Practise。国内技术书籍偏向how,个人更偏向于why。兹以为Kafka以消息队列组件切入大数据生态,转变成流平台更有优势,毕竟掌握一套工具的不同组件和掌握多套工具的成本比,显然前者更低也更自然。相比较于用微批来假装流,用流组装成批更顺理成章。至于未来鹿死谁手,还真有点期待。
有干货,有自己的理解,讲得也很详细。
设计思路学习了