14. Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved.Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved.
「一部だけ」リクエストを
捌ききれない
15. Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved.
発生状況
一部のKafka Broker Clusterだけ
Request Handler がリクエストを捌ききれない
Kafka Broker (一部省略)
R/W
Produce Request
Consume Request
Request Handler
File
System
Producer / Consumerからの
リクエストを基に実際にFile Systemに
読み書きするスレッド
15
(スレッドのアイドル率が低い)
16. Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved.
発生状況
Kafka Broker (一部省略)
R/W
Produce Request
Consume Request
Request Handler
File
System
16
一部のKafka Broker Clusterだけ
Request Handler がリクエストを捌ききれない
(スレッドのアイドル率が低い)
多くのクラスタでのアイドル率は90%以上
アイドル率30%を割るクラスタが発生
17. Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved.
原因調査
各種設定の調査
負荷の高いクラスタと低いクラスタの設定の違いを確認
• Kafka Broker
• JVM
• OS
• ネットワーク
→パフォーマンスに影響する設定の違いはない
Brokerの動作ログを確認した結果、以下の動作の違いを発見
1回のリクエストで
12メッセージ受信
通常のクラスタ 問題のクラスタ
17
リクエスト1回で受け取るメッセージの個数が違う
1回のリクエストで
1メッセージ受信
18. Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved.
Kafkaのバッチングについて
18
Kafkaには1回の送信に複数のメッセージをまとめて送信する
バッチング機能がある
→ 指定メッセージ数貯まるまで or 一定時間経過まで
メッセージを溜め込む
バッチングの大きさ(BatchSize)を大きく
→処理効率高、遅延は増大
今回はKafka ProducerのBatchSize設定も全て一緒
19. Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved.
Kafkaのバッチングについて
19
Kafkaには1回の送信に複数のメッセージをまとめて送信する
バッチング機能がある
→ 指定メッセージ数貯まるまで or 一定時間経過まで
メッセージを溜め込む
バッチングの大きさ(BatchSize)を大きく
→処理効率高、遅延は増大
時間内にメッセージが殆ど溜まっていない!!!
今回はKafka ProducerのBatchSize設定も全て一緒
20. Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved.
答えはProducerに
1台あたりの秒間メッセージ数が少ないのにも関わらずPartition数が多い
Producer (複数台) Broker
…
…
Partitioner
MessageMessage
Batch
Producerはラウンドロビンで全ての
Partitionにメッセージを振り分け
指定時間内に
溜まるBatchSizeが1
Request Handlerが
高負荷に
20
並列処理するための単位
21. Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved.
パラメータ調整/構成変更で対処?
Producerの数を減らせば良い?
• ビジネス要件で不可能
• サービスのサーバ群が高可用性とパフォーマンスの両立を求めており、
Producerの台数が非常に多い。
• 1台あたりの流量は少なく、台数が多い構成を変更できない
Partitionを減らせばいい?
• Kafkaの機能制約
• Partitionを減らす操作はKafkaでは簡単にできない
タイムアウトを長くすればいい?
• ビジネス要件で不可能
• 遅延が長くなり、転送のリアルタイム性が犠牲になる
21