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

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

suzukiry
December 09, 2021

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

suzukiry

December 09, 2021
Tweet

More Decks by suzukiry

Other Decks in Technology

Transcript

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

    View Slide

  2. Apache Kafka の
    Client

    View Slide

  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

    View Slide

  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のプロセス

    View Slide

  5. Producer/Consumer
    概要

    View Slide

  6. Producer
    ● Partitionの割り当ての仕方
    ○ ラウンドロビン
    ○ メッセージ内の "キー "をハッシュ化して指定
    ○ カスタム・パーティショニング
    ● 送信先の該当 Partition の Leader にメッセージを書き込む
    ● QoS:Ack設定による到達保証とレイテンシの管理
    ○ Ackなし
    ○ Leaderに書き込まれたらAckする
    ○ レプリカ状態にあるBrokerのPartitionに書き込まれたらAckする
    ○ min.insync.replicaの設定
    ● その他
    ○ 冪等性

    View Slide

  7. Producer と Partition の関係
    Partition 0
    Partition 1
    Partition 2
    Partition 3
    Topic T1
    Producer
    図 Producer x1

    View Slide

  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のリバランシング
    が行われる

    View Slide

  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

    View Slide

  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 追加変更・障害時のリバランシング

    View Slide

  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

    View Slide

  12. スループットが
    よい理由

    View Slide

  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の
    仕組みを指しています。

    View Slide

  14. Kafka のスループットがなぜ良いのか
    5つのポイント
    Producer Broker Consumer
    ②バッチ処理
    (Producer)
    ②バッチ処理
    (Consumer)
    ④ ページキャッシュ
    (書き込み)
    ①Partitioning
    ④ページキャッシュ
    (読み込み)/Zero copy
    ③シリアライズ化/
    圧縮
    ③デシリアライズ化/
    解凍
    011001••• 011001••• 011001•••

    View Slide

  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
    *ネイティブバッチングと言われたり

    View Slide

  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サイズの上限を上げる)

    View Slide

  17. 環境

    View Slide

  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
    名前空間

    View Slide

  19. シナリオ

    View Slide

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

    View Slide

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

    View Slide

  22. その他

    View Slide

  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をハンズオンをしてみたい

    View Slide

  24. Thank you

    View Slide