14

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

我可以调用forEach流,然后写信给 Kafka 生产者,但这似乎不太优雅。在 Streams 框架中有没有更好的方法来做到这一点?

4

1 回答 1

6

如果您想根据您的数据动态创建主题,您目前(v0.10.2和更早)在 Kafka 的 Streaming API 中得不到任何支持。您将需要自己创建一个KafkaProducer并实现您的动态“路由”(例如使用KStream#foreach()or KStream#process())。请注意,您需要进行同步写入以避免数据丢失(不幸的是,这不是很好)。有计划使用动态主题路由扩展 Streaming API,但目前还没有具体的时间表。

您还应该考虑另外一个考虑因素。如果您事先不知道您的目标主题,而只是依赖所谓的“主题自动创建”功能,则应确保使用所需的配置设置(例如,分区数)创建这些主题或复制因子)。

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

于 2017-01-23T04:32:01.987 回答