我在kafka流应用中读取了10个输入主题(每个mysql表一个主题)。某些主题的消息速率非常低,而其他主题的消息速率则稍高。很少有几个主题会产生大量信息。想知道由于较慢主题上的消息速率低,对较快主题的kafka流处理是否会由于中止而停止?而且,如果我应该在拓扑中创建单独的源节点,以将较慢的主题与较快的主题隔离开来。
我的流应用程序从输入消息中提取信息,转到另一个服务以获取更多数据,并将其写入输出kafka主题。
答案 0 :(得分:1)
这取决于...
如果不同的主题由不同的子拓扑处理(参见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
因此,对于主题2的每条记录,将处理5条主题1的记录。