'シングルライター'は、特定のカフカパーティション/パーティションに書き込むプロセスが1つだけであることを意味します。 「シングルライター」、高可用性、スケーラビリティ、高性能の「正確に一回の配信」をサポートすることは非常に困難です。私はカフカでこの方法をすることをお勧めしません。私は別の技術を選ぶだろう。彼らはちょうど一回配信を実装する予定です - あなたも待つことができます。
私は、次の方法で実装を参照してください:あなたがメッセージの処理を担当しているアプリケーション(シャード)を決める
- プロキシレベル。 シャードで分割する方法は、独自のビジネスロジックを持つことができます。 おそらく、ここでは、どのシャードがメッセージ(それは飼い猫かもしれません)を担当するためのいくつかの 'サービスディスカバリ'が必要です。 また、失敗した場合の再試行戦略を提供する必要があります。
- シャードレベル 特定のカフカパーティションに書き込む責任があります。 1つのプロセスが特定のパーティションを担当することを保証する必要があります。 ここでは、集中ロック(例:飼い葉桶)が必要です。 シャードがダウンすると、別のノードがロックを取得して書き込み処理を開始できます(サービスディスカバリを更新する必要があります)。ロックを取得した後は、最新のメッセージを安全に読んで、書き込み済みかどうかを比較することができます。