es.String(), SerdesFactory.serdFrom(OrderUser.class))
从上述代码可见,through时需要指定Key的序列化器,Value的序列化器,以及分区方式和结果集所在的Topic。这里要注意,该Topic(orderuser-repartition-by-item)的Partition数必须与itemTable对应Topic的Partition数相同,并且through使用的分区方法必须与iteamTable对应Topic的分区方式一样。经过这种through
操作,orderUserStream与itemTable满足了Join条件,可直接进行Join。
5 总结
- Kafka Stream的并行模型完全基于Kafka的分区机制和Rebalance机制,实现了在线动态调整并行度
- 同一Task包含了一个子Topology的所有Processor,使得所有处理逻辑都在同一线程内完成,避免了不必的网络通信开销,从而提高了效率。
through
方法提供了类似Spark的Shuffle机制,为使用不同分区策略的数据提供了Join的可能
- log compact提高了基于Kafka的state store的加载效率
- state store为状态计算提供了可能
- 基于offset的计算进度管理以及基于state store的中间状态管理为发生Consumer rebalance或Failover时从断点处继续处理提供了可能,并为系统容错性提供了保障
- KTable的引入,使得聚合计算拥用了处理乱序问题的能力
6 Kafka系列文章