我有一个要求,我必须根据 <Value object>
中字段的不同值创建主题名称。 。这样所有的records<K,V>
具有相似字段值的进入 Topic_<Field>
。我该如何使用 kstream 来做到这一点?
最佳答案
在 Kafka 1.1.0 中,您可以使用 branch()
将流拆分为子流,然后通过添加不同的接收器运算符(即 to ()
) 到每个子流。
Kafka 2.0(将于六月发布)添加了新的“动态路由”功能,可以简化此场景。比较:https://cwiki.apache.org/confluence/display/KAFKA/KIP-303%3A+Add+Dynamic+Routing+in+Streams+Sink
请注意,Kafka Streams 要求手动创建接收器主题 - Kafka Streams 不会为您创建任何接收器主题。正如@Hemant 提到的,您可以打开自动主题创建。但是,一般不建议这样做(原因之一是您可能需要不同主题的不同配置,但通过自动创建,所有内容都将使用相同的默认配置创建)。
另请注意,如果通过将“不良数据”发送到应用程序并创建数百或数千个主题(通过为每条消息指定不同的主题名称)来启用自动主题创建,则恶意应用程序可能会对您的 Kafka 集群进行 DDoS。因此,不建议启用自动创建主题,而是手动创建主题,存在风险。
关于java - 如何根据某些值字段在运行时创建 Kafka 主题名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50487943/