2016-08-27 8 views
0

プロデューサ側でセマンティクスを正確に取得するには、Kafkaが1.1234を使用することを提案しています。ネットワークエラーが発生するたびに、最後の書き込みが成功したかどうかを確認します。Kafkaプロデューサ側で正確に1つのセマンティクスを得るためにパーティションごとにシングルライタを使用する場合

Partition keyとカスタムパーティション実装を使用して、メッセージの宛先パーティションを指定できます。

最後の書き込みを確認する方法が異なるかどうかが異なる場合は、両方とも同じかどうかが異なりますか?どのパーティションでもHWでそれを行う必要がありますか?

答えて

0

'シングルライター'は、特定のカフカパーティション/パーティションに書き込むプロセスが1つだけであることを意味します。 「シングルライター」、高可用性、スケーラビリティ、高性能の「正確に一回の配信」をサポートすることは非常に困難です。私はカフカでこの方法をすることをお勧めしません。私は別の技術を選ぶだろう。彼らはちょうど一回配信を実装する予定です - あなたも待つことができます。

私は、次の方法で実装を参照してください:あなたがメッセージの処理を担当しているアプリケーション(シャード)を決める

  1. プロキシレベル。 シャードで分割する方法は、独自のビジネスロジックを持つことができます。 おそらく、ここでは、どのシャードがメッセージ(それは飼い猫かもしれません)を担当するためのいくつかの 'サービスディスカバリ'が必要です。 また、失敗した場合の再試行戦略を提供する必要があります。
  2. シャードレベル 特定のカフカパーティションに書き込む責任があります。 1つのプロセスが特定のパーティションを担当することを保証する必要があります。 ここでは、集中ロック(例:飼い葉桶)が必要です。 シャードがダウンすると、別のノードがロックを取得して書き込み処理を開始できます(サービスディスカバリを更新する必要があります)。ロックを取得した後は、最新のメッセージを安全に読んで、書き込み済みかどうかを比較することができます。
関連する問題