マイクロサービスを支える インフラアーキテクチャ 04 · 2.アーキテクチャの再設計- Twelve-Factor App • クラウドネイティブアプリケーションのためのベストプラクティス集
Kafkaを使った マイクロサービス基盤 part2 +運用して起きたトラブル集
-
Upload
matsuchara -
Category
Technology
-
view
4.358 -
download
3
Transcript of Kafkaを使った マイクロサービス基盤 part2 +運用して起きたトラブル集
![Page 1: Kafkaを使った マイクロサービス基盤 part2 +運用して起きたトラブル集](https://reader034.fdocument.pub/reader034/viewer/2022050806/5873b45d1a28aba3548b8457/html5/thumbnails/1.jpg)
Kafkaを使った マイクロサービス基盤 part2 +運用して起きたトラブル集@matsu_chara 2016/5/31 Apache Kafka Meetup Japan #1 at Yahoo! JAPAN
![Page 2: Kafkaを使った マイクロサービス基盤 part2 +運用して起きたトラブル集](https://reader034.fdocument.pub/reader034/viewer/2022050806/5873b45d1a28aba3548b8457/html5/thumbnails/2.jpg)
今日のスライド http://www.slideshare.net/matsu_chara/kafka-part2
![Page 3: Kafkaを使った マイクロサービス基盤 part2 +運用して起きたトラブル集](https://reader034.fdocument.pub/reader034/viewer/2022050806/5873b45d1a28aba3548b8457/html5/thumbnails/3.jpg)
part1のスライド http://xuwei-k.github.io/slides/kafka-matsuri/#1
![Page 4: Kafkaを使った マイクロサービス基盤 part2 +運用して起きたトラブル集](https://reader034.fdocument.pub/reader034/viewer/2022050806/5873b45d1a28aba3548b8457/html5/thumbnails/4.jpg)
自己紹介
• @matsu_chara
• Ponylang非公式エバンジェリスト活動
• Scala新卒研修用テキスト
![Page 5: Kafkaを使った マイクロサービス基盤 part2 +運用して起きたトラブル集](https://reader034.fdocument.pub/reader034/viewer/2022050806/5873b45d1a28aba3548b8457/html5/thumbnails/5.jpg)
話すこと•Kafkaを使ったイベントハブについて
• イベントハブとしてのKafka
• 現在のシステム構成
• Kafkaの設定
•Kafka運用時辛かった事例
• TopicとPartition数増大による性能劣化
• FullGC発生によるPublish失敗
• Raidコントローラエラー発生事件
![Page 6: Kafkaを使った マイクロサービス基盤 part2 +運用して起きたトラブル集](https://reader034.fdocument.pub/reader034/viewer/2022050806/5873b45d1a28aba3548b8457/html5/thumbnails/6.jpg)
• 利用用途の違いでKafkaのチューニングはどう変わるのか
• 運用・性能面で困ったことを共有
話すこと
![Page 7: Kafkaを使った マイクロサービス基盤 part2 +運用して起きたトラブル集](https://reader034.fdocument.pub/reader034/viewer/2022050806/5873b45d1a28aba3548b8457/html5/thumbnails/7.jpg)
Kafkaを使ったEventHubについて
![Page 8: Kafkaを使った マイクロサービス基盤 part2 +運用して起きたトラブル集](https://reader034.fdocument.pub/reader034/viewer/2022050806/5873b45d1a28aba3548b8457/html5/thumbnails/8.jpg)
よくあるKafkaの使われ方• ユーザーアクティビティログ・メトリクスの集約
=> availability重視
• イベントハブ(受け取ったデータをロストしないことが最重要)
=> durabilityを重視
![Page 9: Kafkaを使った マイクロサービス基盤 part2 +運用して起きたトラブル集](https://reader034.fdocument.pub/reader034/viewer/2022050806/5873b45d1a28aba3548b8457/html5/thumbnails/9.jpg)
よくあるKafkaの使われ方• ユーザーアクティビティログ・メトリクスの集約
=> availability重視
• イベントハブ(受け取ったデータをロストしないことが最重要)
=> durabilityを重視
![Page 10: Kafkaを使った マイクロサービス基盤 part2 +運用して起きたトラブル集](https://reader034.fdocument.pub/reader034/viewer/2022050806/5873b45d1a28aba3548b8457/html5/thumbnails/10.jpg)
イベントハブとしてのKafka• 社内システム連携・メッセージングのための基盤
![Page 11: Kafkaを使った マイクロサービス基盤 part2 +運用して起きたトラブル集](https://reader034.fdocument.pub/reader034/viewer/2022050806/5873b45d1a28aba3548b8457/html5/thumbnails/11.jpg)
イベントハブとしてのKafka• 社内システム連携・メッセージングのための基盤
サービス ニコ動/ニコ生とか
Publisher
別システム 別サービスなど
Subscriber
![Page 12: Kafkaを使った マイクロサービス基盤 part2 +運用して起きたトラブル集](https://reader034.fdocument.pub/reader034/viewer/2022050806/5873b45d1a28aba3548b8457/html5/thumbnails/12.jpg)
イベントハブとしてのKafka• Publisherが直接1:Nで配信するのは大変
• 様々な温かみが生まれた歴史…
• 各種サービスから情報を集約したいチームが出てきた時に対応するコスト
• 性能を各サービスでスケールさせるコスト
![Page 13: Kafkaを使った マイクロサービス基盤 part2 +運用して起きたトラブル集](https://reader034.fdocument.pub/reader034/viewer/2022050806/5873b45d1a28aba3548b8457/html5/thumbnails/13.jpg)
イベントハブとしてのKafka• 社内システム連携・メッセージングのための基盤
サービス ニコ動/ニコ生など
Publisher
他サービス メール通知など
Subscriber
![Page 14: Kafkaを使った マイクロサービス基盤 part2 +運用して起きたトラブル集](https://reader034.fdocument.pub/reader034/viewer/2022050806/5873b45d1a28aba3548b8457/html5/thumbnails/14.jpg)
イベントハブとしてのKafka• Kafkaを中心にしてデータを集約
• Kafkaのスケーラビリティにより、色々なサービスが情報をsubscribe可能になる
• publisherのシステム的な都合にsubscriberが影響されない(密結合を防ぐ)
![Page 15: Kafkaを使った マイクロサービス基盤 part2 +運用して起きたトラブル集](https://reader034.fdocument.pub/reader034/viewer/2022050806/5873b45d1a28aba3548b8457/html5/thumbnails/15.jpg)
現在のシステム
• Scala/Play/akka
• 運用開始から半年ちょっと
• Kafka 0.9(クラスタは一つ。まだあまり大きくない)
![Page 16: Kafkaを使った マイクロサービス基盤 part2 +運用して起きたトラブル集](https://reader034.fdocument.pub/reader034/viewer/2022050806/5873b45d1a28aba3548b8457/html5/thumbnails/16.jpg)
現在のシステム• HTTPでイベントを受け取りKafkaへpublish
• KafkaからsubscribeしHTTP/AMQPで通知
HTTPAMQP
HTTP
![Page 17: Kafkaを使った マイクロサービス基盤 part2 +運用して起きたトラブル集](https://reader034.fdocument.pub/reader034/viewer/2022050806/5873b45d1a28aba3548b8457/html5/thumbnails/17.jpg)
Protocol Buffers on Kafka
• イベントのシリアライザは
• 社内システム間連携の基盤として、メッセージの互換性を保障・調整する役割も担いたい
• 互換性維持のやりやすさを考慮して採用
• grpcも併せて社内のデータ交換形式の統一をしていきたい
![Page 18: Kafkaを使った マイクロサービス基盤 part2 +運用して起きたトラブル集](https://reader034.fdocument.pub/reader034/viewer/2022050806/5873b45d1a28aba3548b8457/html5/thumbnails/18.jpg)
Kafkaの設定• データを失わないことを重視
• Netflixの事例と方向性が異なる
項目名 default値 Netflix 設定値
acks 1 1 all
replication.factor - 2 3
min.insync.replica 1 ? 2
![Page 19: Kafkaを使った マイクロサービス基盤 part2 +運用して起きたトラブル集](https://reader034.fdocument.pub/reader034/viewer/2022050806/5873b45d1a28aba3548b8457/html5/thumbnails/19.jpg)
Kafkaの設定
その他の設定はpart1で紹介。
もっとチューニングしたいけど機能追加の兼ね合いがあるので隙を見てやっていきたい
もっと詳細な情報http://xuwei-k.github.io/slides/kafka-matsuri/#34
clouderaの資料http://www.cloudera.com/documentation/kafka/latest/topics/kafka_ha.html
![Page 20: Kafkaを使った マイクロサービス基盤 part2 +運用して起きたトラブル集](https://reader034.fdocument.pub/reader034/viewer/2022050806/5873b45d1a28aba3548b8457/html5/thumbnails/20.jpg)
Kafka運用辛かった事例
![Page 21: Kafkaを使った マイクロサービス基盤 part2 +運用して起きたトラブル集](https://reader034.fdocument.pub/reader034/viewer/2022050806/5873b45d1a28aba3548b8457/html5/thumbnails/21.jpg)
TopicAndPartition増大による 性能劣化
• partitionが増えるとPublish完了までの時間が悪化
• replication factorにも依存
• レプリケーションが主な原因のようなのでnum.replica.fetchers などをチューニングする
![Page 22: Kafkaを使った マイクロサービス基盤 part2 +運用して起きたトラブル集](https://reader034.fdocument.pub/reader034/viewer/2022050806/5873b45d1a28aba3548b8457/html5/thumbnails/22.jpg)
TopicAndPartition増大による 性能劣化
topicをたくさん作り、1topicにのみ100万件publishしたときのqps
• グラフはHDDで計測したもの。SSDでも傾向自体は変化なし。
0 2000 4000 6000 8000
010000
20000
30000
40000
50000
60000
TopicAndPartiton
qps
![Page 23: Kafkaを使った マイクロサービス基盤 part2 +運用して起きたトラブル集](https://reader034.fdocument.pub/reader034/viewer/2022050806/5873b45d1a28aba3548b8457/html5/thumbnails/23.jpg)
TopicAndPartition増大による 性能劣化
• 現在はイベント頻度が高すぎないものに関してはpartition数を1にして対処(必要に応じて増やす)
• partition数の目安は1brokerあたり (100 * broker台数 * replication factor) 程度?(記事参照)
詳細http://www.confluent.io/blog/how-to-choose-the-number-of-topicspartitions-in-a-kafka-cluster/
![Page 24: Kafkaを使った マイクロサービス基盤 part2 +運用して起きたトラブル集](https://reader034.fdocument.pub/reader034/viewer/2022050806/5873b45d1a28aba3548b8457/html5/thumbnails/24.jpg)
TopicAndPartition増大による 性能劣化• Netflixも抑えているが、そちらは可用性に関するチューニング?
• 故障時のオーバーヘッドを減らす
企業 目安 参考元
confluent2000~4000 partitions/broker10K~ partitions/cluster
http://www.confluent.io/blog/how-to-choose-the-number-of-topicspartitions-in-a-kafka-cluster/
Netflix200 broker/cluster 以下10K partition/custer 以下
http://techblog.netflix.com/2016/04/kafka-inside-keystone-pipeline.html
![Page 25: Kafkaを使った マイクロサービス基盤 part2 +運用して起きたトラブル集](https://reader034.fdocument.pub/reader034/viewer/2022050806/5873b45d1a28aba3548b8457/html5/thumbnails/25.jpg)
FullGC発生によるPublish失敗
• 負荷試験中に発生。
• メッセージサイズによる。(Kafka的には1KB程度が最も性能がでてGCにも優しいらしい)
• Javaパフォーマンスに書いてあるようなことをひたすらやっていく。
clouderaの資料 http://www.cloudera.com/documentation/kafka/latest/topics/kafka_performance.html
実際にやったチューニング http://xuwei-k.github.io/slides/kafka-matsuri/#61
![Page 26: Kafkaを使った マイクロサービス基盤 part2 +運用して起きたトラブル集](https://reader034.fdocument.pub/reader034/viewer/2022050806/5873b45d1a28aba3548b8457/html5/thumbnails/26.jpg)
RAIDコントローラエラー発生事件
• 突然Kafkaへのpublishがタイムアウトし始める
• ログを見るとRAIDコントローラが再起動していた
• RAIDコントローラ再起動後のbrokerは正常に動作
• 最近の出来事で調査・対策の方針がまだ立っていない
![Page 27: Kafkaを使った マイクロサービス基盤 part2 +運用して起きたトラブル集](https://reader034.fdocument.pub/reader034/viewer/2022050806/5873b45d1a28aba3548b8457/html5/thumbnails/27.jpg)
RAIDコントローラエラー発生事件
Event
![Page 28: Kafkaを使った マイクロサービス基盤 part2 +運用して起きたトラブル集](https://reader034.fdocument.pub/reader034/viewer/2022050806/5873b45d1a28aba3548b8457/html5/thumbnails/28.jpg)
RAIDコントローラエラー発生事件
RAIDコントローラに 異常発生
![Page 29: Kafkaを使った マイクロサービス基盤 part2 +運用して起きたトラブル集](https://reader034.fdocument.pub/reader034/viewer/2022050806/5873b45d1a28aba3548b8457/html5/thumbnails/29.jpg)
RAIDコントローラエラー発生事件
想定
RAIDコントローラに 異常発生
![Page 30: Kafkaを使った マイクロサービス基盤 part2 +運用して起きたトラブル集](https://reader034.fdocument.pub/reader034/viewer/2022050806/5873b45d1a28aba3548b8457/html5/thumbnails/30.jpg)
RAIDコントローラエラー発生事件
in-sync replicaから離脱
想定
![Page 31: Kafkaを使った マイクロサービス基盤 part2 +運用して起きたトラブル集](https://reader034.fdocument.pub/reader034/viewer/2022050806/5873b45d1a28aba3548b8457/html5/thumbnails/31.jpg)
RAIDコントローラエラー発生事件
残った2台でack
想定
![Page 32: Kafkaを使った マイクロサービス基盤 part2 +運用して起きたトラブル集](https://reader034.fdocument.pub/reader034/viewer/2022050806/5873b45d1a28aba3548b8457/html5/thumbnails/32.jpg)
RAIDコントローラエラー発生事件
in-sync replicaのまま
現実
![Page 33: Kafkaを使った マイクロサービス基盤 part2 +運用して起きたトラブル集](https://reader034.fdocument.pub/reader034/viewer/2022050806/5873b45d1a28aba3548b8457/html5/thumbnails/33.jpg)
RAIDコントローラエラー発生事件
in-sync replicaのまま
現実acks=allを待って タイムアウト
![Page 34: Kafkaを使った マイクロサービス基盤 part2 +運用して起きたトラブル集](https://reader034.fdocument.pub/reader034/viewer/2022050806/5873b45d1a28aba3548b8457/html5/thumbnails/34.jpg)
RAIDコントローラエラー発生事件
現実
しばらく経った後 RAIDコントローラ
再起動
![Page 35: Kafkaを使った マイクロサービス基盤 part2 +運用して起きたトラブル集](https://reader034.fdocument.pub/reader034/viewer/2022050806/5873b45d1a28aba3548b8457/html5/thumbnails/35.jpg)
RAIDコントローラエラー発生事件
現実3台でack
しばらく経った後 RAIDコントローラ
再起動
![Page 36: Kafkaを使った マイクロサービス基盤 part2 +運用して起きたトラブル集](https://reader034.fdocument.pub/reader034/viewer/2022050806/5873b45d1a28aba3548b8457/html5/thumbnails/36.jpg)
RAIDコントローラエラー発生事件
• min.insync.replica=2なので1台落ちてもpublishできるという想定だった。
• しかし「brokerがackを返せない状態」で「クラスタから離脱しなかった」ため、「acks=all」の設定によりpublishできなかったと思われる
• brokerはzookeeperのハートビートには応答するが、ackは返せないという状態になりうる?
![Page 37: Kafkaを使った マイクロサービス基盤 part2 +運用して起きたトラブル集](https://reader034.fdocument.pub/reader034/viewer/2022050806/5873b45d1a28aba3548b8457/html5/thumbnails/37.jpg)
RAIDコントローラエラー発生事件
• acks=2はkafka 0.9からは出来なくなっている
• RAIDを使わない方針も考えられる?
• RAID以外のエラーでも同じような現象は起きうるのか?
• 自動で離脱しないなら、brokerを停止させる外部機構が必要?
![Page 38: Kafkaを使った マイクロサービス基盤 part2 +運用して起きたトラブル集](https://reader034.fdocument.pub/reader034/viewer/2022050806/5873b45d1a28aba3548b8457/html5/thumbnails/38.jpg)
RAIDコントローラエラー発生事件
• Netflixのようにcold standbyなクラスタを用意するのはどうなのか、調子の悪いbrokerを停止させるだけでは不十分?
• 再現できていないので仮説ベースな部分あり
• 意見募集
![Page 39: Kafkaを使った マイクロサービス基盤 part2 +運用して起きたトラブル集](https://reader034.fdocument.pub/reader034/viewer/2022050806/5873b45d1a28aba3548b8457/html5/thumbnails/39.jpg)
まとめ
• 事例紹介
• 用途の違いを意識したチューニングが必要になる
• Netflixのようなavailabilityを重視
• イベントバスとしてdurabilityを重視
• 運用トラブルが起きる前に、confluent/linkedin/clouderaなどの資料は一通り目を通しておくと後悔が少ない。
• 実際の運用時の環境を想定した負荷試験をしてみる