Share
Embed
Transcript
24 slides
-
Kafka Brokerをまたがるパーティション と Kafka Client • Partitionによって、Topicは分割されている。 • Producer/Consumerは、Leader からのみ送信/受信を行う(ノード数↑
スループッ ト↑) ※ Follower からも受信ができるKIP-392もあります。 Broker #1 Broker #2 Broker #3 Partition0 (Leader) Partition1 (Leader) Partition2 (Leader) Producer (Client) Consumer (Client) 例) Topic x1, Partition x3, Replica x2 Partition0 (Follower) Partition2 (Follower) Partition1 (Follower) 参考:KIP392 - https://cwiki.apache.org/confluence/display/KAFKA/KIP-392%3A+Allow+consumers+to+fetch+from+closest+replica -
Kafka Client • Kafka Clientには、どのTopicのPartitionがどのKafka Brokerにあるのかを知るた めのメタデータを接続時に取得する(Bootstrap) ◦ どのTopicをSubscribeしたか? ◦
どのBrokerがPartition Leader/Followerか? • Producer/Consumerの送受信では、ミニバッチ処理が行われる(後述) 参考:https://strimzi.io/blog/2019/04/17/accessing-kafka-part-1/ Bootstrapのプロセス -
Producer • Partitionの割り当ての仕方 ◦ ラウンドロビン ◦ メッセージ内の "キー "をハッシュ化して指定 ◦
カスタム・パーティショニング • 送信先の該当 Partition の Leader にメッセージを書き込む • QoS:Ack設定による到達保証とレイテンシの管理 ◦ Ackなし ◦ Leaderに書き込まれたらAckする ◦ レプリカ状態にあるBrokerのPartitionに書き込まれたらAckする ◦ min.insync.replicaの設定 • その他 ◦ 冪等性 -
Producer と Partition の関係 Partition 0 Partition 1 Partition 2
Partition 3 Topic T1 Producer 図 Producer x1 -
Consumer/Consumer Group • Consumer ◦ Kafka Brokerの1つまたは複数のPartitionからデータを読み出す ◦ Consumerは必ず一つのConsumer Groupに属している
◦ Leader/Follower Partition からの読み出しもKafka 2.4.0 より可能 • Consumer Group ◦ 一つ以上のConsumerが属するグループ ◦ Consumer グループの単位で、 Consumerの追加設定や障害時には、 Consumerのリバランシング が行われる -
Consumer/Consumer Group • QoS:commit をしてメッセージ受信のダブりをOffsetで管理 ◦ At most once ◦
At least once ◦ Exactly once • その他 ◦ __consumer_offsets Topic で commit した offset がトラッキングされる ▪ Key: group, topic, partition ▪ Value : offset -
• Consumer グループ内のConsumerの設定変更や障害があった場合、該当パーティ ションをその他のConsumerが引き継ぎます。 リバランシング Partition 0 Partition 1 Partition
2 Partition 3 Topic T1 Consumer1 Consumer Group Consumer2 Consumer3 Consumer4 Partition 0 Partition 1 Partition 2 Partition 3 Topic T1 Consumer1 Consumer Group Consumer2 Consumer3 Consumer4 リバランシング 図 Consumer 追加変更・障害時のリバランシング -
Consumer と Partition の関係 図 Consumer x1 図 Consumer x4
図 Consumer x2 図 Consumer x5 (1つアイドル状態 ) 図 Consumer グループ x2 出典:https://www.oreilly.com/library/view/kafka-the-definitive/9781491936153/ch04.html -
Apache Kafka のスループットがなぜ良いのか Apache Kafkaのスループットの良さは、「Building LinkedIn’s Real-time Activity Data Pipeline」3.
Engineering for High Throughput に、以下の4つと示されていま す。 1. Partitioning 2. Batching 3. Shrinking Data 4. Reliance on Pagecache このうちの2. Batching (ミニバッチ処理)が今回のProducerとConsumerの 仕組みを指しています。 -
Kafka のスループットがなぜ良いのか 5つのポイント Producer Broker Consumer ②バッチ処理 (Producer) ②バッチ処理 (Consumer)
④ ページキャッシュ (書き込み) ①Partitioning ④ページキャッシュ (読み込み)/Zero copy ③シリアライズ化/ 圧縮 ③デシリアライズ化/ 解凍 011001••• 011001••• 011001••• -
② バッチ処理(Producer) まとめて送信することで、ストリームデータ送信を最適化 • 小さいメッセージを、Producer内で一定のサイズにまとめてから送信。 • アプリケーションレベルで細かいチューニングが可能 (例:レイテンシが良い時はバッチサイズを上げる) Broker #1
アプリ sender Accumulator sender batch0 T0, P0 T0, P1 T1, PN レコード Producer request#0 request#1 Broker #2 batch1 batch0 batch0 batch *ネイティブバッチングと言われたり -
Broker #1 Broker #2 Broker #3 Consumer Fetcher ② バッチ処理(Consumer)
まとめて送信することで、ストリームデータ送信を最適化 アプリ poll() batch0 batch1 batch0 min T0, P1 T0, P2 T0, P0 min max min max max レコード Topic • 小さいメッセージを、Broker 内で一定のサイズにまとめてから送信。 • アプリケーションレベルで細かいチューニングが可能 (例:レイテンシが良い時は Fetchサイズの上限を上げる) -
my-kafka-project 構成図 my-pro-con-project kafka-operator kafka tls-sidecar Zookeeper topic-operator user-operator tls-sidecar
Producer Consumer Strimzi- kafka- operator message message 名前空間 -
AMQ Streams • Apache Kafka のエンタープライズ向けディストリビューション ◦ 2018年から Kafka をサポート、Kubernetes
上でも提供 (Strimzi) ◦ Red Hat AMQ Streams としてローンチ • 提供形態 ◦ Red Hat Enterprise Linux ◦ Red Hat OpenShift Container Platform Apache Kafka on Kubernetes 基礎編 ワークショップ: https://redhat-open.connpass.com/ Strimzi/AMQ Streamsをハンズオンをしてみたい