我有10个输入主题(每个mysql表一个主题),我正在读取,在我的kafka streams应用中。某些主题的消息率很低,而其他主题的消息率稍高。很少有几个topic可以有激增的消息。不知道kafka流在速度较快的主题上的处理会不会因为慢的主题上的低消息率而停滞?还有,我是否应该在拓扑中创建单独的源节点来隔离慢速主题和快速主题。
我的流应用从输入消息中提取信息,到另一个服务获取更多的数据,并将其写入一个输出的kafka主题。
这取决于...
如果不同的主题被不同的子主题处理(参见输出的 Topology#describe()
),每个主题都是单独处理的,如果不同的主题有不同的数据率,也不会有影响。
如果你加入或合并多个主题(因此,它们被同一个子主题处理),那么主题的进度将被 "耦合"。这种耦合是基于 事件时间戳. 因此,数据率较高的主题很可能有 "更密集 "的记录时间戳,因此比数据率较低的主题得到更多的数据处理。例如,在数据率较高的主题中,每一条记录的时间戳都会比数据率较低的主题的时间戳更密集,从而得到更多的数据处理。
// just showing timestamps
topic-1 (partition-0): 3 13 23 33 43 53 63 73 83 93 103 113...
topic-2 (partition-0): 5 55 105
processing order:
3 5 13 23 33 43 53 55 63 73 83 93 103 105 113
因此,每处理一个topic-2的记录,就会处理5个topic-1的记录。