2016-11-12 4 views
1

notifyConsumerに、ProducerがすべてKafka topicに公開されると可能ですか?スパークストリーミング - プロデューサが完了したらどのように消費者に通知するのですか?

複数のパーティションで同じデータ(いくつかの一意のフィールドを持つ)を使用できる可能性があるので、データをグループ化して計算する必要があります。

私はこれにSliding windowを使用することを考えましたが、プロデューサがデータの公開を完了したかどうかはわかりません。

メッセージの量はaround 50Kです。より良い設定のブローカーがあれば、Kafkaは50K messages[Single partition]を数秒で処理できますか?

現在、Default Partitionerに基づいてデータを分割する複数のパーティションを計画しています。

これを処理する効率的な方法はありますか?

更新:

15分ごとに一回、プロデューサーは、データを取得し、それはカフカのトピックにデータを公開開始し、私はこのバッチのためのユースケースであると確信していますが、これは私たちの現在の設計です。

+0

ストリームについて話しているときに「完了」とは何を意味するのか不明です。彼らは不規則な長さのストリームの全体のポイントではありませんか?プロデューサがメッセージのバッチを生成していて、バッチ境界を気にしている場合は、「バッチ終了」メッセージを投稿することができます。 –

+0

@JoePallas:私はポイントを得ることはありません、あなたは "バッチの終わり"メッセージを投稿することによって何を意味しますか? – Shankar

+1

プロデューサはバッチの処理が完了した時点を知っていますが、コンシューマはバッチ内のすべてのメッセージを見たかどうかを知りません。バッチのすべてのデータが公開された後、プロデューサが特別な「バッチ終了」メッセージを発行した場合、消費者はバッチを処理する前にそれを見るまで待つことができます。複数のパーティションがあると、それはもっと複雑になります。マーカーはすべてのパーティションに移動する必要があります。 –

答えて

1

スパークストリーミングはそのようには機能しません。それが動作する方法は、各バッチ間隔で流入して処理されるデータの無限ストリームです。つまり、論理的な「バッチの終わり」を伝えたい場合は、このバッチデータが終了したことを示すメッセージを送信し、処理したメッセージを希望の出力シンクに送信する必要があります。

これを実現する方法の1つは、バッチ間でデータを集約し、バッチ間隔の間に状態を維持できるステートフルストリームを使用することです。

+0

おかげさまで、ステートフルストリームの詳細情報やリンクを教えてください。何かを試すことができます.. – Shankar

+0

@Shankar [このブログの記事](http://asyncified.io/2016/07/31/exploring-stateful)を読むことができます-streaming-with-apache-spark)(免責事項:私は著者です)。 –

+0

ブログはとても役に立ちます。ありがとうございます。 – Shankar

関連する問題