5.kafkaのAPIの消費者

1.kafkaの消費者は、プロセス
1.1。起動時や、コーディネータ・ノードのフェールオーバーでは、消費者が送信ConsumerMetadataRequestをするためにブローカーにブートストラップのリストのいずれかのブローカーをConsumerMetadataResponse 、コンシューマ・グループ所属の消費に対応する位置情報を受信したコーディネータ・ノード。

1.2。消費者は、コーディネータ・ノードを接続し、送信HeartbeatRequestを返された場合HeartbeatResponseが返さIllegalGenerationを示すエラーコードをコーディネータノードが既に初期化されます。消費者は、データのクロールを停止し提出するオフセットを、送信JoinGroupRequestをコーディネーター・ノードに。JoinGroupResponse 、それは消費者が持つべき受信話題-パーティションに消費者団体の新たなリストと現在の世代番号を。コンシューマ・グループ管理が完了しているこの時間は、消費者がデータをクロールを開始し、自身のためにできるパーティションは提出オフセットを

1.3。場合HeartbeatResponse エラーが返されない、消費者は、自身のから続くパーティションのデータリストをクロールしていき、このプロセスが中断されることはありません。

コーディネータ・コーディネーション・プロセス・ノード:
1. 定常状態では、コーディネータ・ノードは、障害検出プロトコルにより、各消費者の各コンシューマ・グループの健康状態を追跡します。

2. 選挙で、ノードを調整開始するには、だけでなく、から、それが管理する消費者団体のリストを読み込み、ZK 各コンシューマ・グループのメンバーシップ情報を読み取るために。何の会員情報が以前に存在しない場合、それは何もしません。動作を開始するために、コーディネータ・ノードに来て最初の消費者と消費者のグループを登録する場合にのみすなわち、ローディング消費者情報の消費者グループメンバーを開始するために、です

3. コーディネータノード終え消費者グループは完全にそれがリストを担当してロードされているすべてのグループメンバーの前にすると、それは以下の見返りに要求に応答しますCoordinatorStartupNotCompleteの:エラーコードHeartbeatRequest OffsetCommitRequest JoinGroupRequest このように、消費者は時間をかけて再試行しますそれが完全にロードされるまで、何のエラーコードは、これまでに返されません

4. 選挙またはスタートでは、すべての消費者は、コーディネータノードグループの障害検出を消費します。コーディネータ・ノードに係る故障検出プロトコルとしてマークされているデッド消費者の消費者グループから削除され、ノードのための調整今回デッドコンシューマ・グループは、バランシングオペレーションをトリガするために消費者に属しコンシューマー・デッド後に、消費者が持っているパーティションの他の消費者のバランスをとる必要性を

5. HeartbeatResponseが返すIllegalGenerationの操作がトリガされるバランス調整、エラーコードを。一度すべての生存の消費者JoinGroupRequests コーディネータノードで再登録し、コーディネータノードは、最新のだろうパーティションで所有権情報JoinGroupResponseの各消費者の間の通信同期、その後、バランシング操作を完了すること。6. 調整ノードは、任意の消費者既に登録されている追跡する話題トピックパーティションの変更を。それが検出された場合は、トピックに新しいパーティションを、それがバランスをとる操作をトリガーします。新しい作成するときにトピックを消費者がすることができますので、バランスをとる操作をトリガーするトピックが作成されたレジスタ関心前のトピックを

2. コンシューマ・グループの使用シナリオ

カフカ:消費者グループでは、2つのシナリオを使用していた
メッセージのすべての共通のテーマの個人消費の同じグループでは、だけでなく、メッセージが唯一の消費者を扱っていることを確認するために:2.1「キューモードを」。すべてのパーティションおよびすべての消費者のテーマコンシューマ・グループを関連付ける行います。一つだけのパーティションが消費者に関連付けられている、そのメッセージは、他の消費者によって受信されることはありません。
消費者はほんの始まりである場合には、すべてのパーティションは、それに割り当てられます。メッセージのサイズを大きくすると、私たちは消費者、水平スケーリング機能の数を拡張する必要があり、すべての消費者に到達することができますパーティションを1つだけ関連していました。任意のパーティションのない分布がないため、パーティションは、アイドル状態になり、消費者の数よりも大きいです。

2.2「パブリッシュ/ サブスクライブ・モデルを」異なる消費者グループを作成すると、メッセージのテーマは、その消費者団体、消費者団体のすべての加入者に送信され、前のシーンに合わせて一緒に仕事を割り当てていることを意味します。これは、我々はそのようなトランザクションの数、金融システムなど、さまざまなアプリケーション要件を、持っているため、多くの場合であるERPのシステムがそれを消費しますし、リスク監視にもそれを消費する必要があります。これは、非同期透明な共通のデータを実現しています。

両方のシナリオでは、コンシューマ・グループは、重要な機能があります:リバランスを新しい消費者がグループに参加するときに有効なパーティション(消費者の数がある場合は、<= パーティションのパーティショントピック数)が、物流業務の再バランシングを開始します(まだ元の消費者に関連付けられているだろう)少なくとも一つのパーティションを保持して新規顧客に付加再割り当て。さまざまな理由の消費者がグループから脱退する場合も同様に、そのパーティションのすべては、消費者の残りの部分に割り当てられます。

 購読(オート)ASSIGN (マニュアル)は、
前述の自動分配が意味 KafkaConsumerのAPI サブスクライブ()メソッドを。この方法は、必須の消費者団体、消費者に設定する必要がありますgroup.id パラメータがnullにすることはできません。そして、あなたはパーティションの割り当てに対処する必要はありません対応するように()サブスクライブ:あなたは、その後、消費者がパーティションを読んでいるテーマを指定手動で使用することができます ASSIGN()メソッドを。あなたは正確に制御メッセージ処理の負荷が必要な場合は、だけでなく、これは手動で有用であろうどのパーティションどんなメッセージを決定することができます

自動送信API
[Hadoopの@ H201 kafka_2.12-0.10.2.1] $ビン/ kafka-topics.sh --create --zookeeper H201:2181、H202:2181、H203:2181 --replication因子-2 - -partitions 3 --topic topic11

 

$ viのcc.java [H201 KKK @のHadoop]
インポートorg.apache.kafka.clients.consumer * ;.
インポートjava.util.Properties;
インポートjava.util.concurrent.ExecutionException;
インポートjava.util.Arrays;
パブリッククラスCC {
公共の静的な無効メイン(文字列[] args)ExecutionException、{InterruptedExceptionあるスロー
プロパティプロパティ(=新しい新しい小道具を);
//クラスタアドレスカフカセット
props.put( "bootstrap.servers"、「H201 :9092、H 2 O 2:9092をH203:9092「);
//コンシューマ・グループ、グループ名、カスタム、グループの消費者の同じグループの名前を設定
props.put(」group.id「」G11「);
自動的に提出//オフセットオープン
小道具を。 PUT( "真の" "enable.auto.commit"、);
//自動送信時間間隔
props.put( "auto.commit.interval.ms"、 "1000");
//シリアライザ
props.put( "key.deserializer"、 "org.apache.kafka.common.serialization.StringDeserializer");
props.put( "value.deserializer"、 "org.apache.kafka.common.serialization.StringDeserializer")。
//消費者インスタンス化
KafkaConsumer <文字列、文字列>消費者=新しい新しいKafkaConsumer <>(小道具)を、
消費者がトピックを購読する//、あなたは複数のトピックを購読することができます
Consumer.subscribe(は、Arrays.asList( "topic11"));
/ブローカからデータを取るために死亡/停止サイクル
ながら(真の){
ConsumerRecords <文字列、文字列>レコード= consumer.poll(100);
(ConsumerRecord <文字列、文字列>レコード:レコード)のため
System.out.printf( " D =%、キー=%S、%S =%n値」オフセット、record.offset()、record.key()、record.value());
}
}
}

 

$ /usr/jdk1.8.0_144/bin/javac -classpath /home/hadoop/kafka_2.12-0.10.2.1/libs/kafka-clients-0.10.2.1.jar cc.java [H201 KKK @のHadoop]
[Hadoopの@ H201 KKK] $の/usr/jdk1.8.0_144/bin/javaのCC

 

説明:
メッセージを取得するために使用される投票、世論調査(引っ張って)
consumer.poll(100):プルデータを100ミリ秒以内に
レコード:メッセージを保存するために、record.valueメッセージの内容

 

 

おすすめ

転載: www.cnblogs.com/xiguage119/p/11241417.html