2017-11-25 13 views
2

膨大な数のトピックを消費するアプリケーションを動的にスケールアウトする方法を理解しようとしています(残念ながら、それらの数を減らすことはできません - 各トピックは特定の種類のデータ用です) 。200+カフカのトピックでスケーリングする

enter image description here

私は自分のアプリケーションクラスタがすべて200件の以上のトピックから負荷を共有したいです。たとえば、新しいアプリケーションノードがクラスタに追加されると、古いノードからのサブスクリプションを「盗む」必要があります。そのため、負荷は再び均等に分散されます。

私が理解する限り、Kafkaのpartinions/consumerグループはトピックを並列化するのに役立ち、複数のトピック間で負荷を共有することはありません。

+2

あなたはすべてのアプリは、正規表現のサブスクリプションを持つすべての200件の以上のトピックにサブスクライブしていることはできますか?そして、それらはすべて1つの消費者グループに入ることができます –

答えて

1

すべてのAppインスタンスが同じKafkaコンシューマーグループ(group.id経由)を使用していることを確認する必要があります。この場合、あなたは実際にあなたが望む均一な分布を持っています。新しいAppインスタンスが追加されると、コンシューマ・グループは再調整を行い、負荷が分散されていることを確認します。

また、新しいトピック/パーティションが作成されると、それを消費するために消費者が「metadata.max.age.ms」(デフォルトは5分)になります。データを見失わないように、 "auto.offset.reset"を "最も早い"に設定してください。

最後に、正規表現を使用してこれらのトピックをすべて購読することができます(可能な場合)。

0

カフカトピックは、同様のタイプのメッセージをグループ化したもので、200種類以上の消費者が消費するメッセージは200種類以上あります(たとえ1つの消費者が論理的に複数のタイプ200種類以上のハンドリングがあります)。

カフカパーティションは、1つのトピックからのメッセージの消費を並列化する方法です。トピックにバインドされたコンシューマ・グループの各コンシューマが1つのコンシューマによって完全に消費されるため、パーティション化機能を理解するには、トピックのパーティションの合計数をコンシューマ・グループのコンシューマの数と少なくとも同じにする必要があります。

ここでは200個以上のトピックがあり、それぞれN個のパーティション(Nは予想されるアプリケーションの最大数に等しいかそれ以上)を持ち、各アプリケーションはすべての200以上のトピックから消費する必要があります。コンシューマはコンシューマ・グループ名で自分自身にラベルを付ける必要があり、トピックにパブリッシュされた各レコードは、各サブスクライバ・コンシューマ・グループ内の1つのコンシューマ・インスタンスに配信されます。すべてのコンシューマは同じコンシューマグループを使用できます。

より良い説明のためKafka documentationを見る

関連する問題