Kafka Streams是Kafka提供的一个用于构建流式处理程序的Java库,它与Storm、Spark等流式处理框架不同,是一个仅依赖于Kafka的Java库,而不是一个流式处理框架。除Kafka之外,Kafka Streams不需要额外的流式处理集群,提供了轻量级、易用的流式处理API。本书包括4部分,共9章,从基础API到复杂拓扑的应用,通过具体示例由浅入深地详细介绍了Kafka Streams基础知识及使用方法。本书的主要内容包含流式处理发展历程和Kafka Streams工作原理的介绍,Kafka基础知识的介绍,使用Kafka Streams实现一个具体流式处理应用程序,讨论状态存储及其使用方法,讨论表和流的二元性及使用场景,介绍Kafka Streams应用程序的监控及测试方法,介绍使用Kafka Connect将现有数据源集成到Kafka Streams中,使用KSQL进行交互式查询等。
本书适合使用Kafka Streams实现流式处理应用的开发人员阅读。
部分开启Kafka Streams之旅
章 欢迎来到Kafka Streams3
1.1大数据的发展以及它是如何改变程序设计方式的3
1.1.1大数据起源4
1.1.2MapReduce中的重要概念5
1.1.3批处理还不够7
1.2流式处理简介8
1.3处理购买交易9
1.3.1权衡流式处理的选择9
1.3.2将需求解构为图表10
1.4改变看待购买交易的视角10
1.4.1源节点11
1.4.2信用卡屏蔽节点11
1.4.3模式节点11
1.4.4奖励节点12
1.4.5存储节点13
1.5Kafka Streams在购买处理节点图中的应用13
1.6Kafka Streams在购买交易流中的应用14
1.6.1定义源15
1.6.2个处理器:屏蔽信用卡号码15
1.6.3第二个处理器:购买模式16
1.6.4第三个处理器:客户奖励17
1.6.5第四个处理器:写入购买记录18
1.7小结18
第2章 Kafka快速指南20
2.1数据问题20
2.2使用Kafka处理数据21
2.2.1ZMart原始的数据平台21
2.2.2一个Kafka销售交易数据中心22
2.3Kafka架构23
2.3.1Kafka是一个消息代理23
2.3.2Kafka是一个日志24
2.3.3Kafka日志工作原理25
2.3.4Kafka和分区25
2.3.5分区按键对数据进行分组26
2.3.6编写自定义分区器27
2.3.7指定一个自定义分区器28
2.3.8确定恰当的分区数29
2.3.9分布式日志29
2.3.10ZooKeeper:领导者、追随者和副本30
2.3.11Apache ZooKeeper31
2.3.12选择一个控制器31
2.3.13副本31
2.3.14控制器的职责32
2.3.15日志管理33
2.3.16日志删除33
2.3.17日志压缩35
2.4生产者发送消息36
2.4.1生产者属性38
2.4.2指定分区和时间戳39
2.4.3指定分区39
2.4.4Kafka中的时间戳40
2.5消费者读取消息40
2.5.1管理偏移量41
2.5.2自动提交偏移量42
2.5.3手动提交偏移量42
2.5.4创建消费者43
2.5.5消费者和分区43
2.5.6再平衡43
2.5.7更细粒度的消费者分配44
2.5.8消费者示例44
2.6安装和运行Kafka45
2.6.1Kafka本地配置45
2.6.2运行Kafka46
2.6.3发送条消息47
2.7小结49
第二部分Kafka Streams开发篇
第3章开发Kafka Streams53
3.1流式处理器API53
3.2Kafka Streams的Hello World54
3.2.1构建“Yelling App”的拓扑55
3.2.2Kafka Streams配置58
3.2.3Serde的创建59
3.3处理客户数据60
3.3.1构建一个拓扑61
3.3.2创建一个自定义的Serde67
3.4交互式开发69
3.5下一步71
3.5.1新需求71
3.5.2将记录写入Kafka之外76
3.6小结78
第4章流和状态79
4.1事件的思考79
4.2将状态操作应用到Kafka Stream81
4.2.1值转换处理器82
4.2.2有状态的客户奖励82
4.2.3初始化值转换器84
4.2.4使用状态将Purchase对象映射为Reward Accumulator84
4.2.5更新奖励处理器88
4.3使用状态存储查找和记录以前看到的数据89
4.3.1数据本地化90
4.3.2故障恢复和容错91
4.3.3Kafka Streams使用状态存储91
4.3.4其他键/值存储供应者92
4.3.5状态存储容错93
4.3.6配置变更日志主题93
4.4连接流以增加洞察力94
4.4.1设置数据95
4.4.2生成包含客户ID的键来执行连接96
4.4.3构建连接98
4.4.4其他连接选项102
4.5Kafka Streams中的时间戳104
4.5.1自带的时间戳提取器实现类105
4.5.2WallclockTimestampExtractor106
4.5.3自定义时间戳提取器106
4.5.4指定一个时间戳提取器107
4.6小结108
第5章KTable API109
5.1流和表之间的关系110
5.1.1记录流110
5.1.2更新记录或变更日志111
5.1.3事件流与更新流对比113
5.2记录更新和KTable配置115
5.2.1设置缓存缓冲大小115
5.2.2设置提交间隔116
小威廉·P.贝杰克(William P.Bejeck Jr.,本名Bill Bejeck)是Kafka Streams源码贡献者,在Conflument公司的Kafka Streams团队工作,有15年以上的软件开发经验,其中8年专注于后端开发,特别是处理大量数据,在数据提炼团队中,使用Kafka来改善下游客户的数据流。