Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Strimzi Kafka Operator を試す Part 2 / Try Strimzi Part2

A9d0b414035afe78da47980a90e62b68?s=47 suzukiry
December 09, 2021

Strimzi Kafka Operator を試す Part 2 / Try Strimzi Part2

A9d0b414035afe78da47980a90e62b68?s=128

suzukiry

December 09, 2021
Tweet

More Decks by suzukiry

Other Decks in Technology

Transcript

  1. Strimzi Kafka Operator を試す Part 2 メッセージの送受信 - 補足資料 -

  2. Apache Kafka の Client

  3. 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
  4. 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のプロセス
  5. Producer/Consumer 概要

  6. Producer • Partitionの割り当ての仕方 ◦ ラウンドロビン ◦ メッセージ内の "キー "をハッシュ化して指定 ◦

    カスタム・パーティショニング • 送信先の該当 Partition の Leader にメッセージを書き込む • QoS:Ack設定による到達保証とレイテンシの管理 ◦ Ackなし ◦ Leaderに書き込まれたらAckする ◦ レプリカ状態にあるBrokerのPartitionに書き込まれたらAckする ◦ min.insync.replicaの設定 • その他 ◦ 冪等性
  7. Producer と Partition の関係 Partition 0 Partition 1 Partition 2

    Partition 3 Topic T1 Producer 図 Producer x1
  8. Consumer/Consumer Group • Consumer ◦ Kafka Brokerの1つまたは複数のPartitionからデータを読み出す ◦ Consumerは必ず一つのConsumer Groupに属している

    ◦ Leader/Follower Partition からの読み出しもKafka 2.4.0 より可能 • Consumer Group ◦ 一つ以上のConsumerが属するグループ ◦ Consumer グループの単位で、 Consumerの追加設定や障害時には、 Consumerのリバランシング が行われる
  9. 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
  10. • 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 追加変更・障害時のリバランシング
  11. 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
  12. スループットが よい理由

  13. 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の 仕組みを指しています。
  14. Kafka のスループットがなぜ良いのか 5つのポイント Producer Broker Consumer ②バッチ処理 (Producer) ②バッチ処理 (Consumer)

    ④ ページキャッシュ (書き込み) ①Partitioning ④ページキャッシュ (読み込み)/Zero copy ③シリアライズ化/ 圧縮 ③デシリアライズ化/ 解凍 011001••• 011001••• 011001•••
  15. ② バッチ処理(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 *ネイティブバッチングと言われたり
  16. 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サイズの上限を上げる)
  17. 環境

  18. 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 名前空間
  19. シナリオ

  20. 1. Producer x1 と Consumer x1 のケース

  21. 2. Producer x1 と Consumer x2 のケース

  22. その他

  23. 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をハンズオンをしてみたい
  24. Thank you