2017-04-06 22 views
0

私はカフカの使用にいくつか問題があります。カフカ:同期処理の並列処理

は、私は私のアルゴリズムでは3段階あります

  1. (のは、100万ポイントがとても10億の距離を計算する必要があるとしましょう)全ての点間の距離を計算し、最大距離を探す
  2. を保管し
  3. Iは、トピックA(I)に点の全て対(i、j)を生成するカフカを使用
  4. 分割最大

によって他のすべての記憶された距離は、私はそれらの結合(II)を消費し、IはcalculaトピックB(III)に(i、j、距離)を再生成する。最後に、このトピックBを消費し、max(IV)を見つけてトピックBを再消費して(i、j、正規化距離)(V)のファイルに格納します。

これは1つのプロデューサで動作しますが、追加するとさらに複雑になります。開始するタイミングを知る方法(IV)そのためには、すべてのデータが消費され、再現されていることを知る必要があります。おそらくkafkaはこれに適したツールではありませんが、分散ディスクスペースや処理などのいくつかの問題に答えています。

トピックの最後の情報を複数のプロデューサーや消費者が食べているときや、他のトピック消費者にどのように話すことができるかについて知っていますか?だから、

producer.send(new ProducerRecord<String, String>(myTopic, "done")); 

消費者がそれを止めることができ、「完了」消費する:私は、最終的な送信として使用し、単一の生産のために

+0

おそらく可能ですが、達成したいのはバッチ処理です。 Kafkaは、ストリーミングデータを処理し、連続的に受信者に配信するように設計されています。 Apache Sparkのようなバッチ指向のフレームワークを使用する方が、あなたの期待にうってつけかもしれません。 – ImbaBalboa

答えて

0

トピックのパーティションを使用して、異なるプロデューサからのプロデュースされたメッセージを別々に処理し、コンシューマグループの異なるインスタンスを作成できます(1インスタンスは1パーティションからメッセージを消費します)。 これにより、同じアプローチを維持し、パーティションでスケーリングすることができます。 この投稿でパーティションについての詳細を確認できます:https://www.confluent.io/blog/how-to-choose-the-number-of-topicspartitions-in-a-kafka-cluster/