将Kafka输入流动态连接到多个输出流

Kafka Streams内置了哪些function,允许将单个输入流动态连接到多个输出流? KStream.branch允许基于true / false谓词进行分支,但这不是我想要的。 我希望每个传入的日志确定它将在运行时流式传输的主题,例如,日志{"date": "2017-01-01"}将流式传输到主题topic-2017-01-01和日志{"date": "2017-01-02"}将流式传输到主题topic-2017-01-02

我可以在流上调用forEach ,然后写给Kafka制作人,但这看起来并不优雅。 在Streams框架中有更好的方法吗?

如果您想根据数据动态创建主题,那么目前Kafka的Streaming API中没有任何支持( v0.10.2及更早版本)。 您需要创建一个KafkaProducer并自己实现动态“路由”(例如使用KStream#foreach()KStream#process() )。 请注意,您需要执行同步写入以避免数据丢失(不幸的是,这不是非常高性能)。 有计划使用动态主题路由扩展Streaming API,但目前此function没有具体的时间表。

还有一个需要考虑的因素。 如果您提前不知道目标主题并且只依赖于所谓的“主题自动创建”function,则应确保使用所需的配置设置创建这些主题(例如,分区数量)或复制因子)。

作为“主题自动创建”的替代方法,您还可以使用Admin Client(自v0.10.1 )来创建具有正确配置的主题。 请参阅https://cwiki.apache.org/confluence/display/KAFKA/KIP-4+-+Command+line+and+centralized+administrative+operations