04/09(火) は「Apache Kafka Meetup Japan #6 @Yahoo! JAPAN」に参加してきました。
会場は YahooLodgeのイベントスペース。
目次
Apache Kafka Meetup Japan とは
前回の参加報告がありますので、そちらを参照してください。
タイムスケジュール
時間 | 内容 |
---|---|
18:30~19:00 | 入場受付 |
19:00~19:05 | オープニング |
19:05~20:05 | "Dissolving the Problem: Kafka is more ACID Than Your Database" Mr. Tim Berglund (Confluent Inc.) |
20:05~20:25 | "ログ監視システムにおける時刻ベース遅延の可視化" 大平哲也 (株式会社サイバーエージェント) |
20:25~20:45 | "Elastic StackでKafkaをモニタリング!" Jun Ohtani / Community Engineer at Elastic |
20:45~21:05 | "大量トラフィックを受けるトピックのレプリケーションボトルネック" Wilson(LINE株式会社) |
21:05~22:00 | 懇親会 + LT(3枠ほど) |
21:15~21:20 | "有価証券情報システムにおけるKafka利用事例" 株式会社QUICK 近藤 |
22:00~22:30 | 撤収 |
内容
Dissolving the Problem: Kafka is more ACID Than Your Database
Mr. Tim Berglund (Confluent Inc.) さん
www.slideshare.net
同じタイトルで今年の7月にOpen Source Software Coferenceで講演されるようですね。
問題を解決する(KafcaからACID準拠のデータベースを作成する)
https://www.amazon.com/dp/1449373321
データベースとは
物事を記憶し、データモデルとACIDトランザクションプロパティを持つプログラム。
ACIDとは何か?
- Atomicity(原子性)
- Consistency(一貫性)
- Isolation(独立性)
- Durability(耐久性)
Durability(耐久性)
Atomicity(原子性)
Isolation(独立性)
Consistency(一貫性)
- 不変式/制約
- 固有のユーザ名
- 口座残高がゼロより大きい
Kafkaとは何か?
- イベントのログなどに使用できるメッセージングキュー
- データアイテムはKey-Value Pair
- 順序保証
- 定数時間リード
- ストレージへの永続化など
Kafkaクラスタで各ノード (ブローカー) にパーティショニングでき、ブローカー間でトピックを複製・保持する。
Topics
パーティショニング
複製
プロデューサー
コンシューマー
Kafka ストリーム
- ストリームをテーブルに変換
- テーブルでストリームを充填
- 集約ストリーム
- あるストリームを別のストリームに結合
- ステートフルアプリケーションを拡張
- 機能的なJava API
- ストリームとテーブルの抽象化
- スケーラブルでフォールトトレラントな状態
KSQL
CREATE TABLE movie_ratings AS SELECT title, SUM(rating)/COUNT(rating) AS avg_rating, COUNT(rating) AS num_ratings FROM ratings LEFT OUTER JOIN movies ON ratings.movie_id = movies.movie_id GROUP BY title;
- 宣言型ストリーム処理言語
- ストリームとテーブルの抽象化を提供
- フィルター、結合、集約
- 水平方向にスケーラブルなKSQLクラスタで実行する
クールだけどKafkaを使ってもいい?
- Atomicity(原子性)
- Consistency(一貫性)
- Isolation(独立性)
- Durability(耐久性)
データベースとは何ですか?
- SQL
- 表モデル
- ストレージエンジン
- コミットログ
あなたはマイクロサービスを書いているだけではありません。 あなたはACIDセマンティクスで裏返しのデータベースを構築しています、そしてそれは良いことです。
個人メモ:
- 英語のセッションで話されていることが結構抜け落ちていたので、こうやって資料を読み直すことで思い出すことが有ってよかった。
- Kafkaって結局一体何なのさ?という問いに対する一つの答えとして、このセッションの内容は興味深いなと思った。
A total treat to present at the Tokyo @apachekafka Meetup tonight, sharing @martinkl’s exceedingly true Kafka-is-ACID notion. Doing some @confluentinc meetings tomorrow and Thursday. I can’t not love this city. #apachekafka #kafkajp pic.twitter.com/zqdvXYp7vy
— Tim Berglund (@tlberglund) 2019年4月9日
ログ監視システムにおける時刻ベース遅延の可視化
大平哲也 (株式会社サイバーエージェント) さん
ログの品質管理システム
- 不正なログをフィルタリングして後続に流す。
- 許容可能な遅延時間に上限がある。
Kafkaはオフセットでログを管理しているが、古いログの滞留量が、流量増加のせいか処理遅延のせいかか分からない。
- 遅延への対応
- 経験則でオフセットの遅延から遅延時刻を推定
- メッセージを手動で取得し、タイムスタンプを一つずつ確認
- 時間ベースでログの遅延を監視したい
時間ベースの遅延計算
- オフセット情報䛾一覧を取得
- 各パーティションから䛾オフセット地点のメッセージを取得
- 現在時刻とtimestampの差を計算
実行時間の問題点
複数パーティション同時購読の課題
改善方法
高速化結果
- 7分半→1分半へ高速化
- 比率にすると1/5程度䛾時間に短縮
- 1分半ほどの実行時間であれば常時回しておけば遅延監視には十分な速度
遅延の可視化
個人メモ:
- こうやって工夫をしながら運用改善を積み重ねていくのは良いなと思った。
- でも、こういう要望って他のところでもありそうな気がするので、本体に取り込んでもらえると良いのかもしれない。
全然わかってないんだけど、こういうのは使えないのかな。https://t.co/mMYsZEZmpG
— kabukawa (@kabukawa) 2019年4月9日
#kafkajp
Elastic StackでKafkaをモニタリング!
Jun Ohtani / Community Engineer at Elastic さん
Monitoring Kafka with Elastic Stack: Filebeat | Elastic Blog
Elastic StackでKafkaのモニタリング始めてみるには? という内容
Elastic Stack
ElasticStack の構成
Beats を使ってモニタリング対象のデータを収集
製品名 | 収集対象 |
---|---|
Filebeat | ログファイル |
Metricbeat | メトリック |
Packetbeat | ネットワークパケット |
Winlogbeat | Windowsイベントログ |
Auditbeat | 監査データ |
Heartbeat | 稼働状況の監視 |
Functionbeat | サーバーレスシッパー |
Java ではないので軽量。Kafka にもデータを送れる。
Beats から直接 Elasticsearch に送ってもいいが、 Elasticsearch はデータベースでは無いのでトランザクションなどを要求されると弱い。
なので Beats
→ Kafka
→ Elasticsearch
→ Kibana
のように、Kafka をElasticsearchの前段に挟むと良いのではないか。
Beatsからデータを送る対象アプリごとにモジュールが用意されてる。
参考文献
データ分析基盤構築入門[Fluentd、Elasticsearch、Kibanaによるログ収集と可視化]
- 作者: 鈴木健太,吉田健太郎,大谷純,道井俊介
- 出版社/メーカー: 技術評論社
- 発売日: 2017/09/21
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (2件) を見る
Elasticsearch実践ガイド (impress top gear)
- 作者: 惣道哲也
- 出版社/メーカー: インプレス
- 発売日: 2018/06/15
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
参考サイト
- ユースケース
- Discuss(Webフォーラム)
- Elastic{ON}のビデオと資料
- サポートメニュー
個人メモ:
- Kafkaの監視、会場ではPrometheusでやっている人が多かった(と言っても数人)
- Beats、種類も結構あるし、接続先のモジュールも多くて結構便利そう。
- kibanaもデフォルトでここまで見られるようになるの、いいな。
大量トラフィックを受けるトピックのレプリケーションボトルネック
Wilson(LINE株式会社) さん
正月のあけおめスパイクトラフィックによってReplicaがOut-of-Synkしてしまったお話
Kafkaのレプリケーションの仕組み
- メッセージを複数のブローカに複製
- Partition/Leader/Fetacherの割り当てをラウンドロビンで行なっている
- 組合せの割当て方によって偏りが生じ、負荷分散が適切に機能しないことがある
正月のあけおめスパイクトラフィック
- 01/01 00:00 前後。LINEに新年の挨拶が飛び交い、メッセージが滞留
- NW, I/O, CPU の使用率は高くない
- 一部のFetcherが複数のPartitionをFetchしようとしていたため、ReplicaのFetchが遅くなっていた
偏りをどうやって減らしたか
- 組合せを見直す
個人メモ:
- 正月のスパイクは通常時の倍以上の流量だったようで、これを遅延をできるだけ少なく捌くのはかなり大変そうだと思った。
- 通常の利用では顕在化しない動きも出るだろうし、今回の偏りの話もその類の話かなと感じた。
- とはいえ、最後はこうやって人間が調整して対応することで事なきを得た、というのが面白かった。
LT:有価証券情報システムにおけるKafka利用事例
株式会社QUICK 近藤 さん
[資料は公開されたら追記します]
懇親会
お寿司とピザを摘みつつ、参加者同士の歓談が続きました。
自分はちょっと疲れが溜まっていたので少し早めに撤収。美味しい料理と飲み物、ありがとうございました!
まとめ
今回も、Kafkaとはなにか?という話から実運用、監視と言った様々な切り口でお話を聞くことができました。 Apache Kafka Meetup Japanでは毎回1セッションは英語のみ(同時通訳無し)のものがあるのですが、それも慣れてしまえば楽しく聞くことができますので、とても良い勉強会だと思います。 次回も是非参加したいなと思いました。
講演者、スタッフ、参加者の皆様、ありがとうございました!