2017-01-22 20 views
8

カフカストリームには、単一の入力ストリームを複数の出力ストリームに動的に接続できる機能が組み込まれていますか? KStream.branchは真/偽の述語に基づいて分岐を許可しますが、これは私が欲しいものではありません。実行時にストリーミングされるトピックを決定するために、着信する各ログを希望します。たとえば、{"date": "2017-01-01"}というログはトピックtopic-2017-01-01にストリーミングされ、{"date": "2017-01-02"}はトピックtopic-2017-01-02にストリーミングされます。カフカ入力ストリームを複数の出力ストリームに動的に接続する

私はストリーム上でforEachと呼んでから、カフカプロデューサーに書き込むことができますが、これはあまりエレガントではありません。 Streamsフレームワークでこれを行うより良い方法はありますか?

+0

「文字列に基づいて」とはどういう意味ですか?btw: 'KStream.branch'は複数の述語をとります(あなたが質問したことは、あなたがこれを逃したことを示しています)。だから、 'branch'はあなたが望むことをすることを許すべきです。たぶんあなたはデータの例を与えることができますか? –

+2

私はより明確にすべきです。私はそれが複数の述語を取ることを知っています - もし私がストリームしたいトピックの固定数を持っていれば良い解決策になります。しかし、私がしようとしているのは、 'foo- {date}'という名前のトピックに書き込むことです。 – kellanburket

答えて

4

あなたのデータに基づいてトピックを動的に作成する場合は、現時点ではKafkaのStreaming API(v0.10.2以前)ではサポートされません。 KafkaProducerを作成し、自分で動的ルーティングを実装する必要があります(たとえば、KStream#foreach()またはKStream#process()を使用)。データ損失を避けるために、同期書き込みを行う必要があることに注意してください(残念なことにパフォーマンスはあまり良くありません)。動的トピックルーティングでStreaming APIを拡張する計画がありますが、現在この機能の具体的なタイムラインはありません。

考慮すべき点がもう1つあります。事前に目的のトピックがわからず、いわゆる「トピック自動作成」機能に頼っているだけの場合は、それらのトピックが目的の構成設定(たとえば、パーティションの数または複製因子)。

「トピック自動作成」の代わりに、Admin Client(v0.10.1以降)を使用して、正しい設定でトピックを作成することもできます。 https://cwiki.apache.org/confluence/display/KAFKA/KIP-4+-+Command+line+and+centralized+administrative+operations

+0

ダイナミックトピックルーティングプランへのリンクを教えてください - 進捗状況に従いたいです - ありがとう – AutomatedMike

+0

https://issues.apache.org/jira/browse/KAFKA-4936 –

関連する問題