部分开启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
5.3聚合和开窗操作117
5.3.1按行业汇总股票成交量118
5.3.2开窗操作122
5.3.3连接KStream和KTable128
5.3.4GlobalKTable130
5.3.5可查询的状态133
5.4小结133
第6章处理器API135
6.1更高阶抽象与更多控制的权衡135
6.2使用源、处理器和接收器创建一个拓扑136
6.2.1添加一个源节点136
6.2.2添加一个处理器节点137
6.2.3增加一个接收器节点140
6.3通过股票分析处理器深入研究处理器API141
6.3.1股票表现处理器应用程序142
6.3.2process()方法145
6.3.3punctuator执行147
6.4组合处理器148
6.5集成处理器API和Kafka Streams API158
6.6小结159
第三部分管理Kafka Streams
第7章监控和性能163
7.1Kafka基本监控163
7.1.1测评消费者和生产者性能164
7.1.2检查消费滞后165
7.1.3拦截生产者和消费者166
7.2应用程序指标169
7.2.1指标配置171
7.2.2如何连接到收集到的指标172
7.2.3使用JMX172
7.2.4查看指标176
7.3更多Kafka Streams调试技术177
7.3.1查看应用程序的表现形式177
7.3.2获取应用程序各种状态的通知178
7.3.3使用状态监听器179
7.3.4状态恢复监听器181
7.3.5未捕获的异常处理器184
7.4小结184
第8章测试Kafka Streams应用程序185
8.1测试拓扑186
8.1.1构建测试用例188
8.1.2测试拓扑中的状态存储190
8.1.3测试处理器和转换器191
8.2集成测试193
8.3小结199
第四部分Kafka Streams进阶
第9章Kafka Streams的不错应用203
9.1将Kafka与其他数据源集成204
9.1.1使用Kafka Connect集成数据205
9.1.2配置Kafka Connect205
9.1.3转换数据207
9.2替代数据库211
9.2.1交互式查询的工作原理213
9.2.2分配状态存储213
9.2.3创建和查找分布式状态存储215
9.2.4编写交互式查询216
9.2.5查询服务器内部218
9.3KSQL221
9.3.1KSQL流和表222
9.3.2KSQL架构222
9.3.3安装和运行KSQL224
9.3.4创建一个KSQL流224
9.3.5编写KSQL查询226
9.3.6创建一张KSQL表227
9.3.7配置KSQL227
9.4小结228
附录A额外的配置信息229
附录B精确一次处理语义234