2016-04-10 6 views
4

以下のアプリケーションのカフカとアッカクラスタ

  1. バンチは、さまざまなトピックの下カフカにメッセージをエンキュー私のユースケースです。
  2. 各トピックのコンシューマには、クラスタ内の作業者に作業が配布されています。作業は、長時間実行、メモリ集中、シンプルなものなどに分類され、従業員がそれに応じて選択されます。

これは、仕事の配布、ルーティング、およびスケーリングのためにAkkaクラスタを探索しています。私はAkkaの "Supervisor"をKafkaの消費者として使用し、その分類に基づいて適切な労働者に入社作業を割り当てることができます。

しかし、私がまだ理解しようとしているのは、Akkaクラスタのスーパーバイザとワーカー間で弾力的な通信方法を実装する正しい方法です。監督がカフカからのメッセージを消費すると直ちに、カフカの相殺が確定するからです。オフセットコミット後に処理中に何らかのエラーが発生した場合は、最後に残した場所から回復して開始するには、次の許容可能な方法がありますか?

Kafkaに支えられた耐久性のあるメールボックスを使用して、スーパーバイザーを永続アクターにします。スーパーバイザはKafkaで作業をエンキューし、作業者はKafkaから作業を取得し、作業を完了した後でのみオフセットを実行します。

+1

探しているものを見つけることを願っていますか?使用するライブラリには、消費後に自動的にメッセージをコミットしない機能があります。 –

答えて

1

Jaakkoによると、実際には使用している第三者のライブラリに依存しています。

私が問題にしている限り、オフセットオートコミットを有効にしましたが、Akka Streams Kafkaを正常に使用しました。

しかし、このライブラリはオフセットコミット(External Offset StorageOffset Storage in Kafkaのセクションを参照)をカスタマイズできるため、ニーズに合っているかもしれません。

ドキュメントは言う:

Consumer.committableSourceはカフカにオフセットした位置をコミットすることが可能となります。自動コミットと比較すると、メッセージがいつ消費されたと考えられるかを正確に制御できます。自動コミットを無効にするには

、あなたがakka.kafka.consumerセクションを追加して、アッカapplication.confファイルを完了する必要があります。

akka.kafka.consumer { 

    # Properties defined by org.apache.kafka.clients.consumer.ConsumerConfig 
    # can be defined in this configuration section. 

    kafka-clients { 
    # Disable auto-commit by default 
    enable.auto.commit = false 
    } 

} 

akka-stream-kafka_2.11の最終バージョン(バージョン0.16)はアッカ2.5.xと互換性がありますが、あなたAkkaツールキットの1つにakka-stream_2.11依存関係をオーバーライドする必要があります。現在、私はAkka 2.5.3でこのライブラリを使用しています。

はカフカから消費するため、どのようなライブラリを使用しているあなたは、あなたがHi :)

関連する問題