如何基于某个值字段在运行时创建Kafka主题名称

时间:2018-05-23 12:02:57

标签: java apache-kafka-streams

我有一个要求,我必须根据<Value object>中某个字段的不同值创建主题名称。因此,具有相似字段值的所有records<K,V>都位于Topic_<Field>中。我怎么能用kstream来做呢?

1 个答案:

答案 0 :(得分:1)

在Kafka 1.1.0中,您可以使用getFileSize("myFileUri"). then(function(fileSize){ console.log(fileSize); }). catch(function(err){ console.error(err); }); 将流分割为子流,然后通过向每个子流添加不同的宿运算符(即branch())将不同的子流写入不同的主题

Kafka 2.0(将于6月发布),增加了一个新的“动态路由”功能,简化了这种情况。比较:https://cwiki.apache.org/confluence/display/KAFKA/KIP-303%3A+Add+Dynamic+Routing+in+Streams+Sink

请注意,Kafka Streams要求手动创建接收器主题 - Kafka Streams不会为您创建任何接收器主题。正如@Hemant所提到的,您可以启用自动主题创建。但是,一般不推荐它(一个原因是你可能想要不同主题的不同配置,但是通过自动创建都将使用相同的默认配置创建。)

另请注意,如果通过向应用程序发送“错误数据”并因此创建数百或数千个主题(通过为每封邮件指定不同的主题名称)来启用自动主题创建,则流氓应用程序可以DDoS您的Kafka群集。因此,它存在风险,不建议启用自动主题创建,而是手动创建主题。