Java 动态地将卡夫卡输入流连接到多个输出流
卡夫卡流中是否内置了允许将单个输入流动态连接到多个输出流的功能<代码>KStream.branch允许基于真/假谓词进行分支,但这并不是我想要的。我希望每个传入日志都能确定它在运行时将流式传输到的主题,例如,日志Java 动态地将卡夫卡输入流连接到多个输出流,java,apache-kafka,apache-kafka-streams,Java,Apache Kafka,Apache Kafka Streams,卡夫卡流中是否内置了允许将单个输入流动态连接到多个输出流的功能KStream.branch允许基于真/假谓词进行分支,但这并不是我想要的。我希望每个传入日志都能确定它在运行时将流式传输到的主题,例如,日志{“日期”:“2017-01-01”}将流式传输到主题topic-2017-01-01,日志{“日期”:“2017-01-02”}将流式传输到主题topic-2017-01-02 我可以在流中调用forEach,然后写信给卡夫卡制作人,但这似乎不是很优雅。在Streams框架中有更好的方法吗?如
{“日期”:“2017-01-01”}
将流式传输到主题topic-2017-01-01
,日志{“日期”:“2017-01-02”}
将流式传输到主题topic-2017-01-02
我可以在流中调用
forEach
,然后写信给卡夫卡制作人,但这似乎不是很优雅。在Streams框架中有更好的方法吗?如果您想根据数据动态创建主题,那么目前Kafka的流式API中没有任何支持(v0.10.2
及更早版本)。您将需要创建一个KafkaProducer
并自己实现动态“路由”(例如使用KStream#foreach()
或KStream#process()
)。请注意,您需要执行同步写入以避免数据丢失(不幸的是,数据丢失的性能不是很好)。有计划通过动态主题路由扩展流式API,但目前还没有具体的时间表
你还应该考虑一点。如果您事先不知道目标主题,而仅仅依赖于所谓的“主题自动创建”功能,则应确保使用所需的配置设置(例如,分区数或复制因子)创建这些主题
作为“主题自动创建”的替代方案,您还可以使用管理客户端(自
v0.10.1
起提供)创建具有正确配置的主题。请参见您所说的“基于字符串”是什么意思--顺便说一句:KStream.branch
使用多个谓词(您的问题表明您忽略了这一点)。因此,branch
应该允许您做您想做的事情。也许你可以举个数据例子?我应该更清楚。我知道它需要多个谓词——如果我有固定数量的主题要流式处理,这将是一个很好的解决方案。不过,我想做的是给名为foo-{date}
的主题写信。你能给我们一个动态主题路由计划的链接吗?我想关注进度-谢谢