SlideShare a Scribd company logo
1 of 39
Download to read offline
Kafkaを使った
マイクロサービス基盤 part2
+運用して起きたトラブル集
@matsu_chara 2016/5/31
Apache Kafka Meetup Japan #1 at Yahoo! JAPAN
今日のスライド
http://www.slideshare.net/matsu_chara/kafka-part2
part1のスライド
http://xuwei-k.github.io/slides/kafka-matsuri/#1
自己紹介
• @matsu_chara
• Ponylang非公式エバンジェリスト活動
• Scala新卒研修用テキスト
話すこと
• Kafkaを使ったイベントハブについて
• イベントハブとしてのKafka
• 現在のシステム構成
• Kafkaの設定
• Kafka運用時辛かった事例
• TopicとPartition数増大による性能劣化
• FullGC発生によるPublish失敗
• Raidコントローラエラー発生事件
• 利用用途の違いでKafkaのチューニングは
どう変わるのか
• 運用・性能面で困ったことを共有
話すこと
Kafkaを使ったEventHubについて
よくあるKafkaの使われ方
• ユーザーアクティビティログ・メトリクスの集約
=> availability重視
• イベントハブ(受け取ったデータをロストしないこと
が最重要)
=> durabilityを重視
よくあるKafkaの使われ方
• ユーザーアクティビティログ・メトリクスの集約
=> availability重視
• イベントハブ(受け取ったデータをロストしないこと
が最重要)
=> durabilityを重視
イベントハブとしてのKafka
• 社内システム連携・メッセージングのための基盤
イベントハブとしてのKafka
• 社内システム連携・メッセージングのための基盤
サービス
ニコ動/ニコ生とか
Publisher
別システム
別サービスなど
Subscriber
イベントハブとしてのKafka
• Publisherが直接1:Nで配信するのは大変
• 様々な温かみが生まれた歴史…
• 各種サービスから情報を集約したいチームが出てきた
時に対応するコスト
• 性能を各サービスでスケールさせるコスト
イベントハブとしてのKafka
• 社内システム連携・メッセージングのための基盤
サービス
ニコ動/ニコ生など
Publisher
他サービス
メール通知など
Subscriber
イベントハブとしてのKafka
• Kafkaを中心にしてデータを集約
• Kafkaのスケーラビリティにより、色々なサービスが情報
をsubscribe可能になる
• publisherのシステム的な都合にsubscriberが影響さ
れない(密結合を防ぐ)
現在のシステム
• Scala/Play/akka
• 運用開始から半年ちょっと
• Kafka 0.9(クラスタは一つ。まだあまり大きくない)
現在のシステム
• HTTPでイベントを受け取りKafkaへpublish
• KafkaからsubscribeしHTTP/AMQPで通知
HTTP
AMQP
HTTP
Protocol Buffers on Kafka
• イベントのシリアライザは
• 社内システム間連携の基盤として、メッセージの
互換性を保障・調整する役割も担いたい
• 互換性維持のやりやすさを考慮して採用
• grpcも併せて社内のデータ交換形式の統一をし
ていきたい
Kafkaの設定
• データを失わないことを重視
• Netflixの事例と方向性が異なる
項目名 default値 Netflix 設定値
acks 1 1 all
replication.factor - 2 3
min.insync.replica 1 ? 2
Kafkaの設定
その他の設定はpart1で紹介。
もっとチューニングしたいけど機能追加の兼ね合いがあるので隙を見てやっ
ていきたい
もっと詳細な情報
http://xuwei-k.github.io/slides/
kafka-matsuri/#34
clouderaの資料
http://www.cloudera.com/
documentation/kafka/latest/topics/
kafka_ha.html
Kafka運用辛かった事例
TopicAndPartition増大による
性能劣化
• partitionが増えるとPublish完了までの時間が悪化
• replication factorにも依存
• レプリケーションが主な原因のようなので
num.replica.fetchers などをチューニングする
TopicAndPartition増大による
性能劣化
topicをたくさん作り、1topicにのみ100万件publishしたときのqps
• グラフはHDDで計測したもの。SSDでも傾向自体は変化なし。
0 2000 4000 6000 8000
0100002000030000400005000060000
TopicAndPartiton
qps
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/
TopicAndPartition増大による
性能劣化
• Netflixも抑えているが、そちらは可用性に関するチューニング?
• 故障時のオーバーヘッドを減らす
企業 目安 参考元
confluent
2000~4000 partitions/broker

10K~ partitions/cluster
http://www.confluent.io/blog/
how-to-choose-the-number-of-
topicspartitions-in-a-kafka-
cluster/
Netflix
200 broker/cluster 以下

10K partition/custer 以下
http://techblog.netflix.com/
2016/04/kafka-inside-
keystone-pipeline.html
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
RAIDコントローラエラー発生事件
• 突然Kafkaへのpublishがタイムアウトし始める
• ログを見るとRAIDコントローラが再起動していた
• RAIDコントローラ再起動後のbrokerは正常に動作
• 最近の出来事で調査・対策の方針がまだ立ってい
ない
RAIDコントローラエラー発生事件
Event
RAIDコントローラエラー発生事件
RAIDコントローラに
異常発生
RAIDコントローラエラー発生事件
想定
RAIDコントローラに
異常発生
RAIDコントローラエラー発生事件
in-sync replicaから離脱
想定
RAIDコントローラエラー発生事件
残った2台でack
想定
RAIDコントローラエラー発生事件
in-sync replicaのまま
現実
RAIDコントローラエラー発生事件
in-sync replicaのまま
現実
acks=allを待って

タイムアウト
RAIDコントローラエラー発生事件
現実
しばらく経った後
RAIDコントローラ
再起動
RAIDコントローラエラー発生事件
現実
3台でack
しばらく経った後
RAIDコントローラ
再起動
RAIDコントローラエラー発生事件
• min.insync.replica=2なので1台落ちてもpublish
できるという想定だった。
• しかし「brokerがackを返せない状態」で「クラスタ
から離脱しなかった」ため、「acks=all」の設定により
publishできなかったと思われる
• brokerはzookeeperのハートビートには応答するが、
ackは返せないという状態になりうる?
RAIDコントローラエラー発生事件
• acks=2はkafka 0.9からは出来なくなっている
• RAIDを使わない方針も考えられる?
• RAID以外のエラーでも同じような現象は起きうる
のか?
• 自動で離脱しないなら、brokerを停止させる外部
機構が必要?
RAIDコントローラエラー発生事件
• Netflixのようにcold standbyなクラスタを用意
するのはどうなのか、調子の悪いbrokerを停止さ
せるだけでは不十分?
• 再現できていないので仮説ベースな部分あり
• 意見募集
まとめ
• 事例紹介
• 用途の違いを意識したチューニングが必要になる
• Netflixのようなavailabilityを重視
• イベントバスとしてdurabilityを重視
• 運用トラブルが起きる前に、confluent/linkedin/clouderaなど
の資料は一通り目を通しておくと後悔が少ない。
• 実際の運用時の環境を想定した負荷試験をしてみる

More Related Content

What's hot

MongoDB概要:金融業界でのMongoDB
MongoDB概要:金融業界でのMongoDBMongoDB概要:金融業界でのMongoDB
MongoDB概要:金融業界でのMongoDB
ippei_suzuki
 

What's hot (20)

Fluentdのお勧めシステム構成パターン
Fluentdのお勧めシステム構成パターンFluentdのお勧めシステム構成パターン
Fluentdのお勧めシステム構成パターン
 
SQL大量発行処理をいかにして高速化するか
SQL大量発行処理をいかにして高速化するかSQL大量発行処理をいかにして高速化するか
SQL大量発行処理をいかにして高速化するか
 
Awsでつくるapache kafkaといろんな悩み
Awsでつくるapache kafkaといろんな悩みAwsでつくるapache kafkaといろんな悩み
Awsでつくるapache kafkaといろんな悩み
 
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
 
Akkaとは。アクターモデル とは。
Akkaとは。アクターモデル とは。Akkaとは。アクターモデル とは。
Akkaとは。アクターモデル とは。
 
並行処理初心者のためのAkka入門
並行処理初心者のためのAkka入門並行処理初心者のためのAkka入門
並行処理初心者のためのAkka入門
 
マイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチマイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチ
 
MQTTとAMQPと.NET
MQTTとAMQPと.NETMQTTとAMQPと.NET
MQTTとAMQPと.NET
 
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
 
シリコンバレーの「何が」凄いのか
シリコンバレーの「何が」凄いのかシリコンバレーの「何が」凄いのか
シリコンバレーの「何が」凄いのか
 
PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜
PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜
PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜
 
怖くないSpring Bootのオートコンフィグレーション
怖くないSpring Bootのオートコンフィグレーション怖くないSpring Bootのオートコンフィグレーション
怖くないSpring Bootのオートコンフィグレーション
 
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
 
[社内勉強会]ELBとALBと数万スパイク負荷テスト
[社内勉強会]ELBとALBと数万スパイク負荷テスト[社内勉強会]ELBとALBと数万スパイク負荷テスト
[社内勉強会]ELBとALBと数万スパイク負荷テスト
 
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
 
本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話
 
まじめに!できる!LT
まじめに!できる!LT まじめに!できる!LT
まじめに!できる!LT
 
backlogsでもCI/CDする夢を見る
backlogsでもCI/CDする夢を見るbacklogsでもCI/CDする夢を見る
backlogsでもCI/CDする夢を見る
 
MongoDB概要:金融業界でのMongoDB
MongoDB概要:金融業界でのMongoDBMongoDB概要:金融業界でのMongoDB
MongoDB概要:金融業界でのMongoDB
 
グリー株式会社『私たちが GCP を使い始めた本当の理由』第 9 回 Google Cloud INSIDE Game & Apps
グリー株式会社『私たちが GCP を使い始めた本当の理由』第 9 回 Google Cloud INSIDE Game & Appsグリー株式会社『私たちが GCP を使い始めた本当の理由』第 9 回 Google Cloud INSIDE Game & Apps
グリー株式会社『私たちが GCP を使い始めた本当の理由』第 9 回 Google Cloud INSIDE Game & Apps
 

Viewers also liked

Kafkaによるリアルタイム処理
Kafkaによるリアルタイム処理Kafkaによるリアルタイム処理
Kafkaによるリアルタイム処理
Naoki Yanai
 

Viewers also liked (9)

リクルートライフスタイルの考える ストリームデータの活かし方(Hadoop Spark Conference2016)
リクルートライフスタイルの考えるストリームデータの活かし方(Hadoop Spark Conference2016)リクルートライフスタイルの考えるストリームデータの活かし方(Hadoop Spark Conference2016)
リクルートライフスタイルの考える ストリームデータの活かし方(Hadoop Spark Conference2016)
 
KafkaとAWS Kinesisの比較
KafkaとAWS Kinesisの比較KafkaとAWS Kinesisの比較
KafkaとAWS Kinesisの比較
 
IoT時代におけるストリームデータ処理と急成長の Apache Flink
IoT時代におけるストリームデータ処理と急成長の Apache FlinkIoT時代におけるストリームデータ処理と急成長の Apache Flink
IoT時代におけるストリームデータ処理と急成長の Apache Flink
 
Treasure Data and AWS - Developers.io 2015
Treasure Data and AWS - Developers.io 2015Treasure Data and AWS - Developers.io 2015
Treasure Data and AWS - Developers.io 2015
 
Developers Summit 2014 「Play2/Scalaでドメイン駆動設計を利用した大規模Webアプリケーションのスクラム開発の勘所」
Developers Summit 2014  「Play2/Scalaでドメイン駆動設計を利用した大規模Webアプリケーションのスクラム開発の勘所」Developers Summit 2014  「Play2/Scalaでドメイン駆動設計を利用した大規模Webアプリケーションのスクラム開発の勘所」
Developers Summit 2014 「Play2/Scalaでドメイン駆動設計を利用した大規模Webアプリケーションのスクラム開発の勘所」
 
Kafkaによるリアルタイム処理
Kafkaによるリアルタイム処理Kafkaによるリアルタイム処理
Kafkaによるリアルタイム処理
 
Fluentd v0.12 master guide
Fluentd v0.12 master guideFluentd v0.12 master guide
Fluentd v0.12 master guide
 
Javaエンジニアに知ってほしい、Springの教科書「TERASOLUNA」 #jjug_ccc #ccc_f3
Javaエンジニアに知ってほしい、Springの教科書「TERASOLUNA」 #jjug_ccc #ccc_f3Javaエンジニアに知ってほしい、Springの教科書「TERASOLUNA」 #jjug_ccc #ccc_f3
Javaエンジニアに知ってほしい、Springの教科書「TERASOLUNA」 #jjug_ccc #ccc_f3
 
Top 5 Deep Learning and AI Stories - October 6, 2017
Top 5 Deep Learning and AI Stories - October 6, 2017Top 5 Deep Learning and AI Stories - October 6, 2017
Top 5 Deep Learning and AI Stories - October 6, 2017
 

Similar to Kafkaを使った マイクロサービス基盤 part2 +運用して起きたトラブル集

MessagePack RPC によるドキドキ非同期通信 @関ジャバ 2012年度8月
MessagePack RPC によるドキドキ非同期通信 @関ジャバ 2012年度8月MessagePack RPC によるドキドキ非同期通信 @関ジャバ 2012年度8月
MessagePack RPC によるドキドキ非同期通信 @関ジャバ 2012年度8月
Takashi Someda
 
Kafka logをオブジェクトストレージに連携する方法まとめ
Kafka logをオブジェクトストレージに連携する方法まとめKafka logをオブジェクトストレージに連携する方法まとめ
Kafka logをオブジェクトストレージに連携する方法まとめ
Keigo Suda
 

Similar to Kafkaを使った マイクロサービス基盤 part2 +運用して起きたトラブル集 (20)

スキーマつきストリーム データ処理基盤、 Confluent Platformとは?
スキーマつきストリーム データ処理基盤、 Confluent Platformとは?スキーマつきストリーム データ処理基盤、 Confluent Platformとは?
スキーマつきストリーム データ処理基盤、 Confluent Platformとは?
 
Spark Structured StreamingでKafkaクラスタのデータをお手軽活用
Spark Structured StreamingでKafkaクラスタのデータをお手軽活用Spark Structured StreamingでKafkaクラスタのデータをお手軽活用
Spark Structured StreamingでKafkaクラスタのデータをお手軽活用
 
Reactive Kafka with Akka Streams
Reactive Kafka with Akka StreamsReactive Kafka with Akka Streams
Reactive Kafka with Akka Streams
 
Kafka vs Pulsar @KafkaMeetup_20180316
Kafka vs Pulsar @KafkaMeetup_20180316Kafka vs Pulsar @KafkaMeetup_20180316
Kafka vs Pulsar @KafkaMeetup_20180316
 
Akka meetup 2014_sep
Akka meetup 2014_sepAkka meetup 2014_sep
Akka meetup 2014_sep
 
恐るべきApache, Web勉強会@福岡
恐るべきApache, Web勉強会@福岡恐るべきApache, Web勉強会@福岡
恐るべきApache, Web勉強会@福岡
 
MessagePack RPC によるドキドキ非同期通信 @関ジャバ 2012年度8月
MessagePack RPC によるドキドキ非同期通信 @関ジャバ 2012年度8月MessagePack RPC によるドキドキ非同期通信 @関ジャバ 2012年度8月
MessagePack RPC によるドキドキ非同期通信 @関ジャバ 2012年度8月
 
噛み砕いてKafka Streams #kafkajp
噛み砕いてKafka Streams #kafkajp噛み砕いてKafka Streams #kafkajp
噛み砕いてKafka Streams #kafkajp
 
Kafka logをオブジェクトストレージに連携する方法まとめ
Kafka logをオブジェクトストレージに連携する方法まとめKafka logをオブジェクトストレージに連携する方法まとめ
Kafka logをオブジェクトストレージに連携する方法まとめ
 
Mackerelによる
簡単サーバー管理入門と発展形
Mackerelによる
簡単サーバー管理入門と発展形Mackerelによる
簡単サーバー管理入門と発展形
Mackerelによる
簡単サーバー管理入門と発展形
 
chat bot framework for Java8
chat bot framework for Java8chat bot framework for Java8
chat bot framework for Java8
 
Apache Sparkを利用した「つぶやきビッグデータ」クローンとリコメンドシステムの構築
Apache Sparkを利用した「つぶやきビッグデータ」クローンとリコメンドシステムの構築Apache Sparkを利用した「つぶやきビッグデータ」クローンとリコメンドシステムの構築
Apache Sparkを利用した「つぶやきビッグデータ」クローンとリコメンドシステムの構築
 
Kafka Streamsによるスケーラブルで非環境依存なストリーム/バッチ処理アーキテクチャ
Kafka Streamsによるスケーラブルで非環境依存なストリーム/バッチ処理アーキテクチャKafka Streamsによるスケーラブルで非環境依存なストリーム/バッチ処理アーキテクチャ
Kafka Streamsによるスケーラブルで非環境依存なストリーム/バッチ処理アーキテクチャ
 
Jjug springセッション
Jjug springセッションJjug springセッション
Jjug springセッション
 
Cloud Foundry Container-to-Container Networking
Cloud Foundry Container-to-Container NetworkingCloud Foundry Container-to-Container Networking
Cloud Foundry Container-to-Container Networking
 
Apache Kafkaでの大量データ処理がKubernetesで簡単にできて嬉しかった話
Apache Kafkaでの大量データ処理がKubernetesで簡単にできて嬉しかった話Apache Kafkaでの大量データ処理がKubernetesで簡単にできて嬉しかった話
Apache Kafkaでの大量データ処理がKubernetesで簡単にできて嬉しかった話
 
とりあえず使えるSBT
とりあえず使えるSBTとりあえず使えるSBT
とりあえず使えるSBT
 
Scalaの現状と課題
Scalaの現状と課題Scalaの現状と課題
Scalaの現状と課題
 
Apache EventMesh を使ってみた
Apache EventMesh を使ってみたApache EventMesh を使ってみた
Apache EventMesh を使ってみた
 
20191120 AWS Black Belt Online Seminar Amazon Managed Streaming for Apache Ka...
20191120 AWS Black Belt Online Seminar Amazon Managed Streaming for Apache Ka...20191120 AWS Black Belt Online Seminar Amazon Managed Streaming for Apache Ka...
20191120 AWS Black Belt Online Seminar Amazon Managed Streaming for Apache Ka...
 

Recently uploaded

Recently uploaded (10)

Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 

Kafkaを使った マイクロサービス基盤 part2 +運用して起きたトラブル集