
书: https://pan.baidu.com/s/15VfTw9eJ2MoiHktwswP0gw?pwd=tq5x
笔记如下:
- “Kafka Streams 是一个用于构建实时流处理应用的轻量级库,直接集成到你的应用中,无需额外集群。”
- “流(Stream)与表(Table)是 Kafka Streams 的核心抽象,分别对应无界数据和有界数据的动态视图。”
- “
KStream
表示连续的事件流,而KTable
代表可更新的状态快照,两者可通过toStream()
和toTable()
相互转换。” - “状态存储(State Store)允许流处理应用维护本地状态,支持
RocksDB
或内存存储。” - “
Topology
类定义了流处理逻辑的 DAG(有向无环图),包含源处理器、流操作和汇处理器。” - “窗口化操作(Windowing)将无限流切分为有限的时间段,支持滚动窗口、滑动窗口和会话窗口。”
- “
join
操作可关联两个流或流与表,分为内连接(inner)、左连接(left)和外连接(outer)。” - “Exactly-Once 语义通过事务和幂等生产者实现,确保每条记录仅处理一次。”
- “
Serde
(Serializer/Deserializer)封装序列化逻辑,用于键值对的转换,如StringSerde
或自定义实现。” - “
KafkaStreams.start()
启动处理拓扑,而close()
确保资源清理和状态一致性。” - “交互式查询(Interactive Queries)允许外部应用通过 REST API 直接查询本地状态存储。”
- “
Repartitioning
在聚合或连接前重分区数据,确保相同键的记录由同一任务处理。” - “处理器 API(Processor API)提供底层控制,适合复杂逻辑;而 DSL(高级API)更简洁。”
- “
StreamsConfig
配置类定义关键参数,如APPLICATION_ID_CONFIG
(应用唯一标识)和BOOTSTRAP_SERVERS_CONFIG
(Kafka集群地址)。” - “
KafkaStreams
实例的线程数由num.stream.threads
控制,并行处理分区数据。” - “时间语义分为事件时间(Event Time)、处理时间(Processing Time)和摄入时间(Ingestion Time),通过
TimestampExtractor
自定义。” - “
GlobalKTable
全局表广播到所有实例,适合小规模维度数据(如配置表)的广播连接。” - “错误处理通过
DeserializationExceptionHandler
和ProductionExceptionHandler
捕获序列化或生产失败。” - “Kafka Streams 的弹性依赖 Kafka 自身的高可用性,任务故障会自动迁移到其他实例。”
- “测试使用
TopologyTestDriver
模拟流处理,无需真实 Kafka 集群即可验证逻辑。”