Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

Apache Kafka の Client

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

Producer/Consumer 概要

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

Consumer/Consumer Group ● Consumer ○ Kafka Brokerの1つまたは複数のPartitionからデータを読み出す ○ Consumerは必ず一つのConsumer Groupに属している ○ Leader/Follower Partition からの読み出しもKafka 2.4.0 より可能 ● Consumer Group ○ 一つ以上のConsumerが属するグループ ○ Consumer グループの単位で、 Consumerの追加設定や障害時には、 Consumerのリバランシング が行われる

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

スループットが よい理由

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

環境

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

シナリオ

Slide 20

Slide 20 text

1. Producer x1 と Consumer x1 のケース

Slide 21

Slide 21 text

2. Producer x1 と Consumer x2 のケース

Slide 22

Slide 22 text

その他

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

Thank you