SlideShare a Scribd company logo
1 of 64
Download to read offline
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
2017年5月20日
1
ヤフー株式会社 データ&サイエンスソリューション統括本部
データプラットフォーム本部 開発4部 パイプライン
森谷 大輔
Java Clientで入門する
Apache Kafka
JJUG CCC 2017 Spring
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
自己紹介
• 森谷 大輔
• インフラエンジニア
• どちらかというとBEアプリケーション開発
• ヤフーのデータパイプラインをつくったり運用したり
• 対外発表
• ストリーム処理プラットフォームにおけるKafka導入事例 (Apache Kafka Meetup Japan #1: 2016)
• Hadoop Summit 2016 @San Jose ストリーム処理関連の報告 (Stream Processing Casual Talks #1: 2016)
• Kafka 0.10.0アップデート プロダクション100ノードでやってみた (D&S Data Night vol.03: 2016)
• 噛み砕いてKafka Streams (Apache Kafka Meetup Japan #2: 2016)
• Elasticsearch 5.2とJava Clientで戯れる (第18回Elasticsearch勉強会: 2017)
2
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
ゴール(と注意)
Kafkaをこれから始めたい、始めたばか
りの人向けにKafkaの基本を実演ベース
で押さえて帰ってもらう
• ※既にガンガン使ってるぜという人は退屈
かも、でもちょっとはいい情報もあるかも
• ※現行最新のバージョン0.10.2.0を前提
3
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
アジェンダ
• Kafkaとは?
• Kafkaの基本
• Java ClientでKafkaを体感する
• まとめ
4
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
Kafkaとは?
5
時間を割きます
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
Apache Kafka
スケーラブルな分散pub/sub型
メッセージングシステムを実現するために
LinkedInが開発してOSS化した (2011年~)
Apacheトップレベルプロジェクトで配布(2012年~)
6
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
実績
7
https://kafka.apache.org/powered-by から一部を抜粋
Fortune 500の内
実に3分の1がKafkaを
利用しているらしい
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
Kafka Summit
• Confluent, inc.が主催
• SF (2016/4, 2017/8), NY (2017/5)
8
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
ユーザ会
• Apache Kafka JP
• https://kafka-apache-jp.connpass.com/
9
https://kafka.apache.org/events
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
Apache Kafka
スケーラブルな分散pub/sub型
メッセージングシステムを実現するために
LinkedInが開発してOSS化した (2011年~)
Apacheトップレベルプロジェクトで配布(2012年~)
10
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
publish/subscribeモデル
11
• Wikipediaには出版-購読型モデルとある
• データの送受信のかたち
• データの送信者(publisher)は受信者(subscriber)を気にしないでどんどん
送る
• 受信者は送信者を気にせず自分のタイミングで取る
publisher
publisher
publisher
仲介者
subscriber
subscriber
subscriber
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
publish/subscribeモデル
12
• つまりpublisherとsubscriberを非同期に分離した
• もしPUSH, PUSHだとどんな問題がある?
publisher
publisher
publisher
仲介者
subscriber
subscriber
subscriber
PULLPUSH
疎結合化
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
具体的にはなんの用途で使うの?
13
• 2つ
• データパイプライン
• ストリーム処理
と公式docのトップにもある
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
データパイプライン
14
Data Source
Data Source
Data Source
RDBMS
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
データパイプライン
15
Data Source
Data Source
Data Source
RDBMS
Data Source
ストリーム処理
Data Source
Data Source
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
データパイプライン
16
Data Source
Data Source
Data Source
RDBMS
Data Source
ストリーム処理
Data Source
Data Source
データレイク・・・
マイクロサービス・・・
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
データパイプライン
17
Data Source
Data Source
Data Source
RDBMS
Data Source
ストリーム処理
Data Source
Data Source
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
ストリーム(リアルタイム)処理
18
• 課題:
このデイリーバッチが終わる明朝まで分析がで
きないよ・・・
• ASAPの意思決定
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
ストリーム(リアルタイム)処理
19
• モジュールの日次クリック率推移を知りたい
• モジュールのクリック率急増を知りたい
• 遅延が多い路線を知りたい
• 電車の遅延を知りたい
• 2016年に話題になったツイートワードを知りたい
• 今見ているテレビ番組のバズツイートワードを知りたい
• ABテストの分析をしたい
• 非常に悪い結果を出しているバケットテストをすぐに停止したい
• マシンの故障率を知りたい
• マシンが故障しそうになったら知りたい
• ユーザの平均的な興味から広告を出したい
• ユーザが今だけ興味を持っている広告を出したい
変化の通知が、実際に変化した点から時
間が経つに連れて価値が低下する
高価値
数秒〜10分 価値の低下
バッチ
ストリーム
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
ストリーム(リアルタイム)処理
20
• ストリーミングデータ
• 終わりがない、連続的に発生するデータ
• を処理するためにはキューイングの機能が必要
• 類似:ActiveMQ, RabbitMQ, ZeroMQ, Redis
• https://www.slideshare.net/laclefyoshi/ss-67658888
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
Kafkaは
• データパイプラインをシンプルにする
• ストリーミングデータを扱える
を両方実現できるように設計された
• 特徴
• バッチ・リアルタイム分析共にサポート
• 受け取ったレコードは直ちに永続化
• スケーラビリティ
• デイリー1兆4千万のレコードを捌く@LinkedIn
• フォールトトレラント
21
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
Kafkaの基本
22
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
pub/sub
23
publisher
publisher
publisher
仲介者
subscriber
subscriber
subscriber
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
Kafkaを構成する4コンポーネント
24
Producer
Producer
Producer
Broker
Consumer
Consumer
Consumer
ZooKeeper狭義にはこれだけを
Kafkaと言うこともある
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.25
• Producer
• Consumer
• Broker
• ZooKeeper
Kafkaを構成する4コンポーネント
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
ZooKeeper
26
• Apache ZooKeeper
• 可用性と信頼性の高い分散コーディネーションシステム
(詳細は割愛)
• Hadoop等でも使われるOSS
• Kafkaでは↓のために使われる
• クラスタマネジメント
• 死活管理
• ACL情報のストア
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
Message
27
Producer
Producer
Producer
Broker
Consumer
Consumer
Consumer
ZooKeeper
Message(=Record)
• Kafka独自フォーマットのバイナリ
• keyとvalueとtimestamp等のメタデータで構
成
• key, valueはユーザ任意の型
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
Topic
28
Producer
Producer
Producer
Broker
Consumer
Consumer
Consumer
weblog
purchase
customer
Topic
• Messageストリームのラベル
• ユーザが名付ける
• Producerは1個か複数のtopicにMessageを投げ
る
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
Partition
29
Producer
weblog: partition
purchase: partition • Topicはさらに負荷分散のた
めにPartitionに分割される
• Partition数はTopic毎にユー
ザが決める
• Partition数は増やせるが減ら
せない
weblog: partition
purchase: partition
weblog: partition
purchase: partition
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
Producer: key partitioning
30
Producer
weblog: partition
purchase: partition
weblog: partition
purchase: partition
weblog: partition
purchase: partition
• keyのハッシュ値から投入先
partitionを決定する
• 同じkeyのMessageは同じ
partitionに投入される
• keyを指定しなければラウンド
ロビン
• またはpartition割り振りロジッ
クをユーザがカスタマイズす
る
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
Log
31
Producer
weblog: partition
purchase: partition
weblog: partition
purchase: partition
weblog: partition
purchase: partition
• partitionは任意のディレクトリ
パスにファイルとして永続化
される
• これをLogという
• 紛らわしいことにKafkaそのも
ののシステムログも別に存在
する、がそれではない
• 保持期間が指定できる
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
Consumer Group
32
Producer
Broker
Consumer
Consumer
Consumer
purchase
• グルーピングされたconsumerは他のconsumerを
気にせずtopicのMessageを漏れなく分散
consumeする
group.id=shopping
group.id=marketing
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
Offset
33
Consumer
Consumer
Consumer
group.id=shopping
group.id=marketing
ということはConsumer Group毎に
どこまで読んだかをConsumerが覚えている
partition 0
0 1 2
partition 1
0 1
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
Offset
34
Consumer
Consumer
Consumer
group.id=shopping
group.id=marketing
partition 0
0 1 2
partition 1
0 1
Offsetは一度決まったら変わらない
• 「group.id=shoppingとしてtopic=purchaseのpartition=0のoffset=2まで読ん
だ」
• この情報はKafkaの専用topicに書き込まれる
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
Java ClientでKafkaを体
感する
35
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
Java Client
• Producer, Consumer APIとしてJava Client
が公式に用意されている
• しかし3rdパーティ製で他言語でも使える
(C/C++, Go, Python等)
• 特にConsumerはアプリケーションコードを書
くことが多い
36
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
Consumer Client
• 特にConsumerはアプリケーションコードを書くことが
多い
• よりハイレベルなAPIやフレームワークもある
• Java Clientは最もローレベルなAPIともいえる
37
Kafka Streams
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
ハイレベルAPIがあるのにわざわざ
ローレベルAPIの使い方を見る必要がある?
ある
• ハイレベルAPIを使いこなすのは簡単でない、Java Clientを把握
していることはハイレベルAPIを使いこなす上でとても有用
• フレームワークは構築から試すまでがかなり大変、ちょっとした
アプリやテストならJava Clientが一番低コストだったり
• ローレベルといっても直感的でないわけではない
• (旧APIのSimpleConsumerさんとはわけが違う)
38
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
これから試すこと
• Kafkaアプリケーションの全ての基本
• サンプルデータをProducerがBrokerにproduce
する
• ConsumerがBrokerからそのデータをconsume
して確認する
39
Producer Broker Consumer
k: null, v: “こんにちは世界” “こんにちは世界” ?
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
どうやって動作確認する?
• Producer, Consumer, Broker, ZooKeeper
1. ZooKeeper, Kafkaを開発機にインストール
2. ZooKeeper daemonとBroker daemonを起動して
3. お試しProducerコードを書いてjarを配備して起動して
4. お試しConsumerコードを書いてjarを配備して起動して
40
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
面倒!
• フレームワークだともっと面倒
41
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
これがあれば一連の流れが試せる
4つの最低限コンポーネント
• ZooKeeper: JVMで動く
• Kafka Broker: JVMで動く
• Kafka Producer: JVMで動く
• Kafka Consumer: JVMで動く
• Javaコードペラ一枚でできるのでは?
42
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
A. できる
• つまりJUnit上で試せる
• Kafkaアプリケーションを開発するときはこ
の手を使ってテストすると良い
• ConsumerがStormやKafka Streamsだった
としても、それもJVMなので同じ手が使える
43
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
• ZooKeeperとBrokerをJavaコード上で起動する方法は公
式docのFAQにある
• https://cwiki.apache.org/confluence/display/KAFKA/FAQ#FAQ-Unittesting
• やや長いのでライブラリを作って一行くらいで起動できる
ようにしておくと吉
• 今回はすみません、自作のものを使います
• 使い勝手は違いますが基本やっていることはFAQと同じ
44
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
Java Client【とJUnit】
でKafkaを体感する
(今度こそ)
45
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
これから試すこと(再掲)
• Kafkaアプリケーションの全ての基本
• サンプルデータをProducerがBrokerにproduce
する
• ConsumerがBrokerからそのデータをconsume
して確認する
46
Producer Broker Consumer
k: null, v: “こんにちは世界” “こんにちは世界” ?
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
デモ1
• pom
• テストコード
• broker partitionの実体を見てみましょう
• Producer, ConsumerのJavaDoc
• https://kafka.apache.org/0102/javadoc/index.html?org/apache/kafka/clients/producer/KafkaProducer.html
• https://kafka.apache.org/0102/javadoc/index.html?org/apache/kafka/clients/consumer/KafkaConsumer.html
47
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
Consumer Groupを体感する
48
Producer
Broker
Consumer
test-topic
group.id=B
Consumer
group.id=A
• Aというgroup.idとBというgroup.idで同じ
topicのMessageを読んでみる
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
デモ2
49
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
• 5件投げたら5件ずつ、合計10件読
めた
• consumer group BをAに変えてもう
一回試すとどうなるか
50
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
デモ2.1
51
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
• 1スレッドだけが5件読んでもう1スレッドは働
かなかった
• なぜかは後で
• とりあえずconsumer groupを分ければ別とし
て読めることがわかった
52
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
partitioningで負荷分散を体感する
• topic毎にpartition数を指定できる
• partition=1だとBroker nodeを何台増やしても拡張しない
• 1partitionは1Consumerからしか読まれない
• 1partitionを2Consumerから同時に読むことはできない、
2partitionなら可能
• さっき1スレッドだけが5件読んでもう1スレッドが働かな
かった理由はそれ
53
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
デモ3
• partition数を2にしてさっきのコードを実行して
みます
• broker partitionの実体も変わっていることを確
認
54
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
今回は同プロセス内スレッドで分散さ
せたが、本番ではnode間で分散され
ることになるはず
55
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
key partitioning
• Aさんのログイン失敗が30分以内に5回以上を検知
• Kafka Consumerで実装した場合
56
partition
0
partition
1
partition
2
2回失敗
?
2回失敗
?
1回失敗
?Consumer Consumer Consumer
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
こんなときに使える
• keyでgroupingして集約したい
• keyでストリームデータ同士をjoinしたい
• uniqueKeyを入れてウィンドウで重複除
去したい
57
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
デモ4
• Aという文字列をkeyに入れてさっきの
2partitionに投げてみます
• さっきは分散したが今回は?
58
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
デモ5
• 圧縮
• するとしないのとではネットワークトラフィック、
Brokerのディスク消費が大きく変わる
• その代わりCPUを食う
• gzip, snappy, lz4
• Consumerで読むときはなにで圧縮されたか気
にする必要は無い
59
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
マルチスレッド実装の注意点
• テストのためにConsumerはマルチスレッドで試してきた
• 本番でも性能を出すために恐らくマルチスレッド実装する
• KafkaProducerクラスはスレッドセーフ
• KafkaConsumerクラスはスレッドセーフではない
(※wakeupメソッドだけ例外)
• Consumerオブジェクトをスレッド間で共有して操作すると
ConcurrentModificationException
• 各スレッドで作るようにすればOK
60
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
KafkaConsumer 0.10.2で使える便利メソッド紹介
61
返り値型 メソッド 機能、使いどころ
void • commitSync()
• commitSync(Map<TopicPartition, OffsetAndMetadata>
offsets)
• commitAsync(OffsetCommitCallback callback)
Offsetのコミットを自動定期に任せない場合、自分でOffset
コミットしたいタイミングを指定する。
特定のpartitionについて特定のOffsetでコミット、ということ
もできる。
処理を含めてAt-least-onceを実現する場合は必須。
Map<TopicPar
tition,
OffsetAndTim
estamp>
• offsetsForTimes(Map<TopicPartition, Long>
timestampsToSearch)
最近追加された強力な機能。
MessageのtimestampからOffsetを逆引きする。
下記のseekと合わせて使うことで何時何分のデータから何
時何分のデータを再度consumeし直すといったユースケー
スを実現できる。
void • seek(TopicPartition partition, long offset)
• seekToBeginning(Collection<TopicPartition> partitions)
• seekToEnd(Collection<TopicPartition> partitions)
今読んでいるOffsetを途中で変える機能。
ほとんどのConsumerアプリケーションで稼働中に任意に
Offsetを変えたい要望が出てくるので重要度が高いメソッド。
void • pause(Collection<TopicPartition> partitions)
• resume(Collection<TopicPartition> partitions)
特定のpartitionのconsumeを一時停止したり再開させたり
する。「今だけ特定のpartitionのconsumeに集中させたい」
といった要件を実現する。
便利だが実装がやや難しい。
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
まとめ
62
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
このセッションで
• どんなときにKafkaを使うといいかわかった
• Kafkaを試すために最低限必要なコンポーネントを覚えた
• JUnitでKafkaを試せることがわかった
• Java ClientでKafkaのpartitioning, Consumer Groupの機
能を体感した
• マルチスレッドConsumerアプリケーションを書く上で最低
限注意すべきことがわかった
63
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
Kafka Meetup JP #3
7/6(木)開催
64
以下connpassで案内予定
https://kafka-apache-jp.connpass.com/
会場は LODGE@ヤフー

More Related Content

What's hot

ストリーム処理プラットフォームにおけるKafka導入事例 #kafkajp
ストリーム処理プラットフォームにおけるKafka導入事例 #kafkajpストリーム処理プラットフォームにおけるKafka導入事例 #kafkajp
ストリーム処理プラットフォームにおけるKafka導入事例 #kafkajpYahoo!デベロッパーネットワーク
 
Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方Taku Miyakawa
 
Apache Avro vs Protocol Buffers
Apache Avro vs Protocol BuffersApache Avro vs Protocol Buffers
Apache Avro vs Protocol BuffersSeiya Mizuno
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Kohei Tokunaga
 
速習!論理レプリケーション ~基礎から最新動向まで~(PostgreSQL Conference Japan 2022 発表資料)
速習!論理レプリケーション ~基礎から最新動向まで~(PostgreSQL Conference Japan 2022 発表資料)速習!論理レプリケーション ~基礎から最新動向まで~(PostgreSQL Conference Japan 2022 発表資料)
速習!論理レプリケーション ~基礎から最新動向まで~(PostgreSQL Conference Japan 2022 発表資料)NTT DATA Technology & Innovation
 
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)NTT DATA Technology & Innovation
 
Knative Eventing 入門(Kubernetes Novice Tokyo #11 発表資料)
Knative Eventing 入門(Kubernetes Novice Tokyo #11 発表資料)Knative Eventing 入門(Kubernetes Novice Tokyo #11 発表資料)
Knative Eventing 入門(Kubernetes Novice Tokyo #11 発表資料)NTT DATA Technology & Innovation
 
BuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルドBuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルドAkihiro Suda
 
1日5分でPostgreSQLに詳しくなるアプリの開発 ~PostgRESTを使ってみた~(第38回PostgreSQLアンカンファレンス@オンライン 発...
1日5分でPostgreSQLに詳しくなるアプリの開発 ~PostgRESTを使ってみた~(第38回PostgreSQLアンカンファレンス@オンライン 発...1日5分でPostgreSQLに詳しくなるアプリの開発 ~PostgRESTを使ってみた~(第38回PostgreSQLアンカンファレンス@オンライン 発...
1日5分でPostgreSQLに詳しくなるアプリの開発 ~PostgRESTを使ってみた~(第38回PostgreSQLアンカンファレンス@オンライン 発...NTT DATA Technology & Innovation
 
アーキテクチャから理解するPostgreSQLのレプリケーション
アーキテクチャから理解するPostgreSQLのレプリケーションアーキテクチャから理解するPostgreSQLのレプリケーション
アーキテクチャから理解するPostgreSQLのレプリケーションMasahiko Sawada
 
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)NTT DATA Technology & Innovation
 
コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門Kohei Tokunaga
 
GKE に飛んでくるトラフィックを 自由自在に操る力 | 第 10 回 Google Cloud INSIDE Games & Apps Online
GKE に飛んでくるトラフィックを 自由自在に操る力 | 第 10 回 Google Cloud INSIDE Games & Apps OnlineGKE に飛んでくるトラフィックを 自由自在に操る力 | 第 10 回 Google Cloud INSIDE Games & Apps Online
GKE に飛んでくるトラフィックを 自由自在に操る力 | 第 10 回 Google Cloud INSIDE Games & Apps OnlineGoogle Cloud Platform - Japan
 
PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜
PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜
PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜Preferred Networks
 
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)NTT DATA Technology & Innovation
 
ゼロから作るKubernetesによるJupyter as a Service ー Kubernetes Meetup Tokyo #43
ゼロから作るKubernetesによるJupyter as a Service ー Kubernetes Meetup Tokyo #43ゼロから作るKubernetesによるJupyter as a Service ー Kubernetes Meetup Tokyo #43
ゼロから作るKubernetesによるJupyter as a Service ー Kubernetes Meetup Tokyo #43Preferred Networks
 
Apache Kafka 0.11 の Exactly Once Semantics
Apache Kafka 0.11 の Exactly Once SemanticsApache Kafka 0.11 の Exactly Once Semantics
Apache Kafka 0.11 の Exactly Once SemanticsYoshiyasu SAEKI
 
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織Takafumi ONAKA
 

What's hot (20)

ストリーム処理プラットフォームにおけるKafka導入事例 #kafkajp
ストリーム処理プラットフォームにおけるKafka導入事例 #kafkajpストリーム処理プラットフォームにおけるKafka導入事例 #kafkajp
ストリーム処理プラットフォームにおけるKafka導入事例 #kafkajp
 
Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方
 
Apache Avro vs Protocol Buffers
Apache Avro vs Protocol BuffersApache Avro vs Protocol Buffers
Apache Avro vs Protocol Buffers
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
 
速習!論理レプリケーション ~基礎から最新動向まで~(PostgreSQL Conference Japan 2022 発表資料)
速習!論理レプリケーション ~基礎から最新動向まで~(PostgreSQL Conference Japan 2022 発表資料)速習!論理レプリケーション ~基礎から最新動向まで~(PostgreSQL Conference Japan 2022 発表資料)
速習!論理レプリケーション ~基礎から最新動向まで~(PostgreSQL Conference Japan 2022 発表資料)
 
分散トレーシング技術について(Open tracingやjaeger)
分散トレーシング技術について(Open tracingやjaeger)分散トレーシング技術について(Open tracingやjaeger)
分散トレーシング技術について(Open tracingやjaeger)
 
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
 
Knative Eventing 入門(Kubernetes Novice Tokyo #11 発表資料)
Knative Eventing 入門(Kubernetes Novice Tokyo #11 発表資料)Knative Eventing 入門(Kubernetes Novice Tokyo #11 発表資料)
Knative Eventing 入門(Kubernetes Novice Tokyo #11 発表資料)
 
BuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルドBuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルド
 
1日5分でPostgreSQLに詳しくなるアプリの開発 ~PostgRESTを使ってみた~(第38回PostgreSQLアンカンファレンス@オンライン 発...
1日5分でPostgreSQLに詳しくなるアプリの開発 ~PostgRESTを使ってみた~(第38回PostgreSQLアンカンファレンス@オンライン 発...1日5分でPostgreSQLに詳しくなるアプリの開発 ~PostgRESTを使ってみた~(第38回PostgreSQLアンカンファレンス@オンライン 発...
1日5分でPostgreSQLに詳しくなるアプリの開発 ~PostgRESTを使ってみた~(第38回PostgreSQLアンカンファレンス@オンライン 発...
 
アーキテクチャから理解するPostgreSQLのレプリケーション
アーキテクチャから理解するPostgreSQLのレプリケーションアーキテクチャから理解するPostgreSQLのレプリケーション
アーキテクチャから理解するPostgreSQLのレプリケーション
 
今さら聞けない人のためのCI/CD超入門
今さら聞けない人のためのCI/CD超入門今さら聞けない人のためのCI/CD超入門
今さら聞けない人のためのCI/CD超入門
 
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
 
コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門
 
GKE に飛んでくるトラフィックを 自由自在に操る力 | 第 10 回 Google Cloud INSIDE Games & Apps Online
GKE に飛んでくるトラフィックを 自由自在に操る力 | 第 10 回 Google Cloud INSIDE Games & Apps OnlineGKE に飛んでくるトラフィックを 自由自在に操る力 | 第 10 回 Google Cloud INSIDE Games & Apps Online
GKE に飛んでくるトラフィックを 自由自在に操る力 | 第 10 回 Google Cloud INSIDE Games & Apps Online
 
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 Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
 
ゼロから作るKubernetesによるJupyter as a Service ー Kubernetes Meetup Tokyo #43
ゼロから作るKubernetesによるJupyter as a Service ー Kubernetes Meetup Tokyo #43ゼロから作るKubernetesによるJupyter as a Service ー Kubernetes Meetup Tokyo #43
ゼロから作るKubernetesによるJupyter as a Service ー Kubernetes Meetup Tokyo #43
 
Apache Kafka 0.11 の Exactly Once Semantics
Apache Kafka 0.11 の Exactly Once SemanticsApache Kafka 0.11 の Exactly Once Semantics
Apache Kafka 0.11 の Exactly Once Semantics
 
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
 

Viewers also liked

Java libraries you can't afford to miss
Java libraries you can't afford to missJava libraries you can't afford to miss
Java libraries you can't afford to missAndres Almiray
 
Kotlin is charming; The reasons Java engineers should start Kotlin.
Kotlin is charming; The reasons Java engineers should start Kotlin.Kotlin is charming; The reasons Java engineers should start Kotlin.
Kotlin is charming; The reasons Java engineers should start Kotlin.JustSystems Corporation
 
VMの歩む道。 Dalvik、ART、そしてJava VM
VMの歩む道。 Dalvik、ART、そしてJava VMVMの歩む道。 Dalvik、ART、そしてJava VM
VMの歩む道。 Dalvik、ART、そしてJava VMyy yank
 
U-NEXT学生インターン、過激なJavaの学び方と過激な要求
U-NEXT学生インターン、過激なJavaの学び方と過激な要求U-NEXT学生インターン、過激なJavaの学び方と過激な要求
U-NEXT学生インターン、過激なJavaの学び方と過激な要求hajime funaki
 
2017spring jjug ccc_f2
2017spring jjug ccc_f22017spring jjug ccc_f2
2017spring jjug ccc_f2Kazuhiro Wada
 
Arachne Unweaved (JP)
Arachne Unweaved (JP)Arachne Unweaved (JP)
Arachne Unweaved (JP)Ikuru Kanuma
 
Jjugccc2017spring-postgres-ccc_m1
Jjugccc2017spring-postgres-ccc_m1Jjugccc2017spring-postgres-ccc_m1
Jjugccc2017spring-postgres-ccc_m1Kosuke Kida
 
SpotBugs(FindBugs)による 大規模ERPのコード品質改善
SpotBugs(FindBugs)による 大規模ERPのコード品質改善SpotBugs(FindBugs)による 大規模ERPのコード品質改善
SpotBugs(FindBugs)による 大規模ERPのコード品質改善Works Applications
 
Polyglot on the JVM with Graal (English)
Polyglot on the JVM with Graal (English)Polyglot on the JVM with Graal (English)
Polyglot on the JVM with Graal (English)Logico
 
新卒2年目から始めるOSSのススメ~明日からできるコミットデビュー~
新卒2年目から始めるOSSのススメ~明日からできるコミットデビュー~新卒2年目から始めるOSSのススメ~明日からできるコミットデビュー~
新卒2年目から始めるOSSのススメ~明日からできるコミットデビュー~Yoshio Kajikuri
 
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜JustSystems Corporation
 
JJUG CCC 2017 Spring Seasar2からSpringへ移行した俺たちのアプリケーションがマイクロサービスアーキテクチャへ歩み始めた
JJUG CCC 2017 Spring Seasar2からSpringへ移行した俺たちのアプリケーションがマイクロサービスアーキテクチャへ歩み始めたJJUG CCC 2017 Spring Seasar2からSpringへ移行した俺たちのアプリケーションがマイクロサービスアーキテクチャへ歩み始めた
JJUG CCC 2017 Spring Seasar2からSpringへ移行した俺たちのアプリケーションがマイクロサービスアーキテクチャへ歩み始めたKoichi Sakata
 
データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3
データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3 データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3
データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3 Hiroshi Ito
 
Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~
Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~
Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~Hiroyuki Ohnaka
 
Introduction of Project Jigsaw
Introduction of Project JigsawIntroduction of Project Jigsaw
Introduction of Project JigsawYuichi Sakuraba
 
グラフデータベース入門
グラフデータベース入門グラフデータベース入門
グラフデータベース入門Masaya Dake
 
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8y_taka_23
 
Java8 コーディングベストプラクティス and NetBeansのメモリログから...
Java8 コーディングベストプラクティス and NetBeansのメモリログから...Java8 コーディングベストプラクティス and NetBeansのメモリログから...
Java8 コーディングベストプラクティス and NetBeansのメモリログから...なおき きしだ
 

Viewers also liked (20)

Java libraries you can't afford to miss
Java libraries you can't afford to missJava libraries you can't afford to miss
Java libraries you can't afford to miss
 
Kotlin is charming; The reasons Java engineers should start Kotlin.
Kotlin is charming; The reasons Java engineers should start Kotlin.Kotlin is charming; The reasons Java engineers should start Kotlin.
Kotlin is charming; The reasons Java engineers should start Kotlin.
 
VMの歩む道。 Dalvik、ART、そしてJava VM
VMの歩む道。 Dalvik、ART、そしてJava VMVMの歩む道。 Dalvik、ART、そしてJava VM
VMの歩む道。 Dalvik、ART、そしてJava VM
 
U-NEXT学生インターン、過激なJavaの学び方と過激な要求
U-NEXT学生インターン、過激なJavaの学び方と過激な要求U-NEXT学生インターン、過激なJavaの学び方と過激な要求
U-NEXT学生インターン、過激なJavaの学び方と過激な要求
 
2017spring jjug ccc_f2
2017spring jjug ccc_f22017spring jjug ccc_f2
2017spring jjug ccc_f2
 
Jjug ccc
Jjug cccJjug ccc
Jjug ccc
 
Arachne Unweaved (JP)
Arachne Unweaved (JP)Arachne Unweaved (JP)
Arachne Unweaved (JP)
 
Jjugccc2017spring-postgres-ccc_m1
Jjugccc2017spring-postgres-ccc_m1Jjugccc2017spring-postgres-ccc_m1
Jjugccc2017spring-postgres-ccc_m1
 
SpotBugs(FindBugs)による 大規模ERPのコード品質改善
SpotBugs(FindBugs)による 大規模ERPのコード品質改善SpotBugs(FindBugs)による 大規模ERPのコード品質改善
SpotBugs(FindBugs)による 大規模ERPのコード品質改善
 
Polyglot on the JVM with Graal (English)
Polyglot on the JVM with Graal (English)Polyglot on the JVM with Graal (English)
Polyglot on the JVM with Graal (English)
 
新卒2年目から始めるOSSのススメ~明日からできるコミットデビュー~
新卒2年目から始めるOSSのススメ~明日からできるコミットデビュー~新卒2年目から始めるOSSのススメ~明日からできるコミットデビュー~
新卒2年目から始めるOSSのススメ~明日からできるコミットデビュー~
 
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
 
日本Javaグループ2017年定期総会 #jjug
日本Javaグループ2017年定期総会 #jjug 日本Javaグループ2017年定期総会 #jjug
日本Javaグループ2017年定期総会 #jjug
 
JJUG CCC 2017 Spring Seasar2からSpringへ移行した俺たちのアプリケーションがマイクロサービスアーキテクチャへ歩み始めた
JJUG CCC 2017 Spring Seasar2からSpringへ移行した俺たちのアプリケーションがマイクロサービスアーキテクチャへ歩み始めたJJUG CCC 2017 Spring Seasar2からSpringへ移行した俺たちのアプリケーションがマイクロサービスアーキテクチャへ歩み始めた
JJUG CCC 2017 Spring Seasar2からSpringへ移行した俺たちのアプリケーションがマイクロサービスアーキテクチャへ歩み始めた
 
データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3
データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3 データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3
データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3
 
Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~
Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~
Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~
 
Introduction of Project Jigsaw
Introduction of Project JigsawIntroduction of Project Jigsaw
Introduction of Project Jigsaw
 
グラフデータベース入門
グラフデータベース入門グラフデータベース入門
グラフデータベース入門
 
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
 
Java8 コーディングベストプラクティス and NetBeansのメモリログから...
Java8 コーディングベストプラクティス and NetBeansのメモリログから...Java8 コーディングベストプラクティス and NetBeansのメモリログから...
Java8 コーディングベストプラクティス and NetBeansのメモリログから...
 

Similar to Java Clientで入門する Apache Kafka #jjug_ccc #ccc_e2

Yahoo! JAPANのコンテンツプラットフォームを支えるSpring Cloud Streamによるマイクロサービスアーキテクチャ #jsug #sf_52
Yahoo! JAPANのコンテンツプラットフォームを支えるSpring Cloud Streamによるマイクロサービスアーキテクチャ #jsug #sf_52Yahoo! JAPANのコンテンツプラットフォームを支えるSpring Cloud Streamによるマイクロサービスアーキテクチャ #jsug #sf_52
Yahoo! JAPANのコンテンツプラットフォームを支えるSpring Cloud Streamによるマイクロサービスアーキテクチャ #jsug #sf_52Yahoo!デベロッパーネットワーク
 
Kafka Summit NYCに見るストリーミングデータETLの話 #streamdatajp
Kafka Summit NYCに見るストリーミングデータETLの話 #streamdatajpKafka Summit NYCに見るストリーミングデータETLの話 #streamdatajp
Kafka Summit NYCに見るストリーミングデータETLの話 #streamdatajpYahoo!デベロッパーネットワーク
 
Dataworks Summit 2017 SanJose StreamProcessing - Hadoop Source Code Reading #...
Dataworks Summit 2017 SanJose StreamProcessing - Hadoop Source Code Reading #...Dataworks Summit 2017 SanJose StreamProcessing - Hadoop Source Code Reading #...
Dataworks Summit 2017 SanJose StreamProcessing - Hadoop Source Code Reading #...Yahoo!デベロッパーネットワーク
 
Yahoo! JAPANのサービス開発を10倍早くした社内PaaS構築の今とこれから
Yahoo! JAPANのサービス開発を10倍早くした社内PaaS構築の今とこれからYahoo! JAPANのサービス開発を10倍早くした社内PaaS構築の今とこれから
Yahoo! JAPANのサービス開発を10倍早くした社内PaaS構築の今とこれからYahoo!デベロッパーネットワーク
 
Datadog monitoring with HashiCorp stack
Datadog monitoring with HashiCorp stackDatadog monitoring with HashiCorp stack
Datadog monitoring with HashiCorp stackMasatomo Ito
 
Datadog monitoring with HashiCorp
Datadog monitoring with HashiCorpDatadog monitoring with HashiCorp
Datadog monitoring with HashiCorpMasatomo Ito
 
JSUG 2018/02/05 SpringOnePlatform2017参加報告 プラットフォーム関連のお話
JSUG 2018/02/05 SpringOnePlatform2017参加報告 プラットフォーム関連のお話JSUG 2018/02/05 SpringOnePlatform2017参加報告 プラットフォーム関連のお話
JSUG 2018/02/05 SpringOnePlatform2017参加報告 プラットフォーム関連のお話Yahoo!デベロッパーネットワーク
 
Dataworks Summit SJ QueryEngine - Hadoop Source Code Reading #23 #hadoopreading
Dataworks Summit SJ QueryEngine - Hadoop Source Code Reading #23 #hadoopreadingDataworks Summit SJ QueryEngine - Hadoop Source Code Reading #23 #hadoopreading
Dataworks Summit SJ QueryEngine - Hadoop Source Code Reading #23 #hadoopreadingYahoo!デベロッパーネットワーク
 
Automation of Rolling Upgrade of Hadoop Cluster without Data Lost and Job Fai...
Automation of Rolling Upgrade of Hadoop Cluster without Data Lost and Job Fai...Automation of Rolling Upgrade of Hadoop Cluster without Data Lost and Job Fai...
Automation of Rolling Upgrade of Hadoop Cluster without Data Lost and Job Fai...Yahoo!デベロッパーネットワーク
 
Kafka vs Pulsar @KafkaMeetup_20180316
Kafka vs Pulsar @KafkaMeetup_20180316Kafka vs Pulsar @KafkaMeetup_20180316
Kafka vs Pulsar @KafkaMeetup_20180316Nozomi Kurihara
 
今注目のSpark SQL、知っておきたいその性能とは 20151209 OSC Enterprise
今注目のSpark SQL、知っておきたいその性能とは 20151209 OSC Enterprise今注目のSpark SQL、知っておきたいその性能とは 20151209 OSC Enterprise
今注目のSpark SQL、知っておきたいその性能とは 20151209 OSC EnterpriseYusukeKuramata
 
HBase Meetup Tokyo Summer 2015 #hbasejp
HBase Meetup Tokyo Summer 2015 #hbasejpHBase Meetup Tokyo Summer 2015 #hbasejp
HBase Meetup Tokyo Summer 2015 #hbasejpCloudera Japan
 
20161027 hadoop summit Generating Recommendations at Amazon Scale with Apach...
20161027 hadoop summit  Generating Recommendations at Amazon Scale with Apach...20161027 hadoop summit  Generating Recommendations at Amazon Scale with Apach...
20161027 hadoop summit Generating Recommendations at Amazon Scale with Apach...Amazon Web Services Japan
 
技術選択とアーキテクトの役割
技術選択とアーキテクトの役割技術選択とアーキテクトの役割
技術選択とアーキテクトの役割Toru Yamaguchi
 
20130313 OSCA Hadoopセミナー
20130313 OSCA Hadoopセミナー20130313 OSCA Hadoopセミナー
20130313 OSCA HadoopセミナーIchiro Fukuda
 
HBase Across the World #LINE_DM
HBase Across the World #LINE_DMHBase Across the World #LINE_DM
HBase Across the World #LINE_DMCloudera Japan
 
TokyoWebminig カジュアルなHadoop
TokyoWebminig カジュアルなHadoopTokyoWebminig カジュアルなHadoop
TokyoWebminig カジュアルなHadoopTeruo Kawasaki
 

Similar to Java Clientで入門する Apache Kafka #jjug_ccc #ccc_e2 (20)

Yahoo! JAPANのコンテンツプラットフォームを支えるSpring Cloud Streamによるマイクロサービスアーキテクチャ #jsug #sf_52
Yahoo! JAPANのコンテンツプラットフォームを支えるSpring Cloud Streamによるマイクロサービスアーキテクチャ #jsug #sf_52Yahoo! JAPANのコンテンツプラットフォームを支えるSpring Cloud Streamによるマイクロサービスアーキテクチャ #jsug #sf_52
Yahoo! JAPANのコンテンツプラットフォームを支えるSpring Cloud Streamによるマイクロサービスアーキテクチャ #jsug #sf_52
 
Apache Big Data Miami 2017 - Hadoop Source Code Reading #23 #hadoopreading
Apache Big Data Miami 2017 - Hadoop Source Code Reading #23 #hadoopreadingApache Big Data Miami 2017 - Hadoop Source Code Reading #23 #hadoopreading
Apache Big Data Miami 2017 - Hadoop Source Code Reading #23 #hadoopreading
 
Kafka Summit NYCに見るストリーミングデータETLの話 #streamdatajp
Kafka Summit NYCに見るストリーミングデータETLの話 #streamdatajpKafka Summit NYCに見るストリーミングデータETLの話 #streamdatajp
Kafka Summit NYCに見るストリーミングデータETLの話 #streamdatajp
 
Dataworks Summit 2017 SanJose StreamProcessing - Hadoop Source Code Reading #...
Dataworks Summit 2017 SanJose StreamProcessing - Hadoop Source Code Reading #...Dataworks Summit 2017 SanJose StreamProcessing - Hadoop Source Code Reading #...
Dataworks Summit 2017 SanJose StreamProcessing - Hadoop Source Code Reading #...
 
Yahoo! JAPANのサービス開発を10倍早くした社内PaaS構築の今とこれから
Yahoo! JAPANのサービス開発を10倍早くした社内PaaS構築の今とこれからYahoo! JAPANのサービス開発を10倍早くした社内PaaS構築の今とこれから
Yahoo! JAPANのサービス開発を10倍早くした社内PaaS構築の今とこれから
 
Datadog monitoring with HashiCorp stack
Datadog monitoring with HashiCorp stackDatadog monitoring with HashiCorp stack
Datadog monitoring with HashiCorp stack
 
Datadog monitoring with HashiCorp
Datadog monitoring with HashiCorpDatadog monitoring with HashiCorp
Datadog monitoring with HashiCorp
 
JSUG 2018/02/05 SpringOnePlatform2017参加報告 プラットフォーム関連のお話
JSUG 2018/02/05 SpringOnePlatform2017参加報告 プラットフォーム関連のお話JSUG 2018/02/05 SpringOnePlatform2017参加報告 プラットフォーム関連のお話
JSUG 2018/02/05 SpringOnePlatform2017参加報告 プラットフォーム関連のお話
 
Spring Boot on Kubernetes : Yahoo!ズバトク事例 #jjug_ccc
Spring Boot on Kubernetes : Yahoo!ズバトク事例 #jjug_cccSpring Boot on Kubernetes : Yahoo!ズバトク事例 #jjug_ccc
Spring Boot on Kubernetes : Yahoo!ズバトク事例 #jjug_ccc
 
Dataworks Summit SJ QueryEngine - Hadoop Source Code Reading #23 #hadoopreading
Dataworks Summit SJ QueryEngine - Hadoop Source Code Reading #23 #hadoopreadingDataworks Summit SJ QueryEngine - Hadoop Source Code Reading #23 #hadoopreading
Dataworks Summit SJ QueryEngine - Hadoop Source Code Reading #23 #hadoopreading
 
Automation of Rolling Upgrade of Hadoop Cluster without Data Lost and Job Fai...
Automation of Rolling Upgrade of Hadoop Cluster without Data Lost and Job Fai...Automation of Rolling Upgrade of Hadoop Cluster without Data Lost and Job Fai...
Automation of Rolling Upgrade of Hadoop Cluster without Data Lost and Job Fai...
 
YJTC18 A-1 大規模サーバの戦略
YJTC18 A-1 大規模サーバの戦略YJTC18 A-1 大規模サーバの戦略
YJTC18 A-1 大規模サーバの戦略
 
Kafka vs Pulsar @KafkaMeetup_20180316
Kafka vs Pulsar @KafkaMeetup_20180316Kafka vs Pulsar @KafkaMeetup_20180316
Kafka vs Pulsar @KafkaMeetup_20180316
 
今注目のSpark SQL、知っておきたいその性能とは 20151209 OSC Enterprise
今注目のSpark SQL、知っておきたいその性能とは 20151209 OSC Enterprise今注目のSpark SQL、知っておきたいその性能とは 20151209 OSC Enterprise
今注目のSpark SQL、知っておきたいその性能とは 20151209 OSC Enterprise
 
HBase Meetup Tokyo Summer 2015 #hbasejp
HBase Meetup Tokyo Summer 2015 #hbasejpHBase Meetup Tokyo Summer 2015 #hbasejp
HBase Meetup Tokyo Summer 2015 #hbasejp
 
20161027 hadoop summit Generating Recommendations at Amazon Scale with Apach...
20161027 hadoop summit  Generating Recommendations at Amazon Scale with Apach...20161027 hadoop summit  Generating Recommendations at Amazon Scale with Apach...
20161027 hadoop summit Generating Recommendations at Amazon Scale with Apach...
 
技術選択とアーキテクトの役割
技術選択とアーキテクトの役割技術選択とアーキテクトの役割
技術選択とアーキテクトの役割
 
20130313 OSCA Hadoopセミナー
20130313 OSCA Hadoopセミナー20130313 OSCA Hadoopセミナー
20130313 OSCA Hadoopセミナー
 
HBase Across the World #LINE_DM
HBase Across the World #LINE_DMHBase Across the World #LINE_DM
HBase Across the World #LINE_DM
 
TokyoWebminig カジュアルなHadoop
TokyoWebminig カジュアルなHadoopTokyoWebminig カジュアルなHadoop
TokyoWebminig カジュアルなHadoop
 

More from Yahoo!デベロッパーネットワーク

ヤフーでは開発迅速性と品質のバランスをどう取ってるか
ヤフーでは開発迅速性と品質のバランスをどう取ってるかヤフーでは開発迅速性と品質のバランスをどう取ってるか
ヤフーでは開発迅速性と品質のバランスをどう取ってるかYahoo!デベロッパーネットワーク
 
データの価値を最大化させるためのデザイン~データビジュアライゼーションの方法~ #devsumi 17-E-2
データの価値を最大化させるためのデザイン~データビジュアライゼーションの方法~ #devsumi 17-E-2データの価値を最大化させるためのデザイン~データビジュアライゼーションの方法~ #devsumi 17-E-2
データの価値を最大化させるためのデザイン~データビジュアライゼーションの方法~ #devsumi 17-E-2Yahoo!デベロッパーネットワーク
 
ヤフーを支えるセキュリティ ~サイバー攻撃を防ぐエンジニアの仕事とは~ #yjtc
ヤフーを支えるセキュリティ ~サイバー攻撃を防ぐエンジニアの仕事とは~ #yjtcヤフーを支えるセキュリティ ~サイバー攻撃を防ぐエンジニアの仕事とは~ #yjtc
ヤフーを支えるセキュリティ ~サイバー攻撃を防ぐエンジニアの仕事とは~ #yjtcYahoo!デベロッパーネットワーク
 
Yahoo! JAPANのIaaSを支えるKubernetesクラスタ、アップデート自動化への挑戦 #yjtc
Yahoo! JAPANのIaaSを支えるKubernetesクラスタ、アップデート自動化への挑戦 #yjtcYahoo! JAPANのIaaSを支えるKubernetesクラスタ、アップデート自動化への挑戦 #yjtc
Yahoo! JAPANのIaaSを支えるKubernetesクラスタ、アップデート自動化への挑戦 #yjtcYahoo!デベロッパーネットワーク
 
ヤフーのAIプラットフォーム紹介 ~AIテックカンパニーを支えるデータ基盤~ #yjtc
ヤフーのAIプラットフォーム紹介 ~AIテックカンパニーを支えるデータ基盤~ #yjtcヤフーのAIプラットフォーム紹介 ~AIテックカンパニーを支えるデータ基盤~ #yjtc
ヤフーのAIプラットフォーム紹介 ~AIテックカンパニーを支えるデータ基盤~ #yjtcYahoo!デベロッパーネットワーク
 
新技術を使った次世代の商品の見せ方 ~ヤフオク!のマルチビュー機能~ #yjtc
新技術を使った次世代の商品の見せ方 ~ヤフオク!のマルチビュー機能~ #yjtc新技術を使った次世代の商品の見せ方 ~ヤフオク!のマルチビュー機能~ #yjtc
新技術を使った次世代の商品の見せ方 ~ヤフオク!のマルチビュー機能~ #yjtcYahoo!デベロッパーネットワーク
 
PC版Yahoo!メールリニューアル ~サービスのUI/UX統合と改善プロセス~ #yjtc
PC版Yahoo!メールリニューアル ~サービスのUI/UX統合と改善プロセス~ #yjtcPC版Yahoo!メールリニューアル ~サービスのUI/UX統合と改善プロセス~ #yjtc
PC版Yahoo!メールリニューアル ~サービスのUI/UX統合と改善プロセス~ #yjtcYahoo!デベロッパーネットワーク
 
モブデザインによる多職種チームのコミュニケーション改善 #yjtc
モブデザインによる多職種チームのコミュニケーション改善 #yjtcモブデザインによる多職種チームのコミュニケーション改善 #yjtc
モブデザインによる多職種チームのコミュニケーション改善 #yjtcYahoo!デベロッパーネットワーク
 
ユーザーの地域を考慮した検索入力補助機能の改善の試み #yjtc
ユーザーの地域を考慮した検索入力補助機能の改善の試み #yjtcユーザーの地域を考慮した検索入力補助機能の改善の試み #yjtc
ユーザーの地域を考慮した検索入力補助機能の改善の試み #yjtcYahoo!デベロッパーネットワーク
 

More from Yahoo!デベロッパーネットワーク (20)

ゼロから始める転移学習
ゼロから始める転移学習ゼロから始める転移学習
ゼロから始める転移学習
 
継続的なモデルモニタリングを実現するKubernetes Operator
継続的なモデルモニタリングを実現するKubernetes Operator継続的なモデルモニタリングを実現するKubernetes Operator
継続的なモデルモニタリングを実現するKubernetes Operator
 
ヤフーでは開発迅速性と品質のバランスをどう取ってるか
ヤフーでは開発迅速性と品質のバランスをどう取ってるかヤフーでは開発迅速性と品質のバランスをどう取ってるか
ヤフーでは開発迅速性と品質のバランスをどう取ってるか
 
オンプレML基盤on Kubernetes パネルディスカッション
オンプレML基盤on Kubernetes パネルディスカッションオンプレML基盤on Kubernetes パネルディスカッション
オンプレML基盤on Kubernetes パネルディスカッション
 
LakeTahoe
LakeTahoeLakeTahoe
LakeTahoe
 
オンプレML基盤on Kubernetes 〜Yahoo! JAPAN AIPF〜
オンプレML基盤on Kubernetes 〜Yahoo! JAPAN AIPF〜オンプレML基盤on Kubernetes 〜Yahoo! JAPAN AIPF〜
オンプレML基盤on Kubernetes 〜Yahoo! JAPAN AIPF〜
 
Persistent-memory-native Database High-availability Feature
Persistent-memory-native Database High-availability FeaturePersistent-memory-native Database High-availability Feature
Persistent-memory-native Database High-availability Feature
 
データの価値を最大化させるためのデザイン~データビジュアライゼーションの方法~ #devsumi 17-E-2
データの価値を最大化させるためのデザイン~データビジュアライゼーションの方法~ #devsumi 17-E-2データの価値を最大化させるためのデザイン~データビジュアライゼーションの方法~ #devsumi 17-E-2
データの価値を最大化させるためのデザイン~データビジュアライゼーションの方法~ #devsumi 17-E-2
 
eコマースと実店舗の相互利益を目指したデザイン #yjtc
eコマースと実店舗の相互利益を目指したデザイン #yjtceコマースと実店舗の相互利益を目指したデザイン #yjtc
eコマースと実店舗の相互利益を目指したデザイン #yjtc
 
ヤフーを支えるセキュリティ ~サイバー攻撃を防ぐエンジニアの仕事とは~ #yjtc
ヤフーを支えるセキュリティ ~サイバー攻撃を防ぐエンジニアの仕事とは~ #yjtcヤフーを支えるセキュリティ ~サイバー攻撃を防ぐエンジニアの仕事とは~ #yjtc
ヤフーを支えるセキュリティ ~サイバー攻撃を防ぐエンジニアの仕事とは~ #yjtc
 
Yahoo! JAPANのIaaSを支えるKubernetesクラスタ、アップデート自動化への挑戦 #yjtc
Yahoo! JAPANのIaaSを支えるKubernetesクラスタ、アップデート自動化への挑戦 #yjtcYahoo! JAPANのIaaSを支えるKubernetesクラスタ、アップデート自動化への挑戦 #yjtc
Yahoo! JAPANのIaaSを支えるKubernetesクラスタ、アップデート自動化への挑戦 #yjtc
 
ビッグデータから人々のムードを捉える #yjtc
ビッグデータから人々のムードを捉える #yjtcビッグデータから人々のムードを捉える #yjtc
ビッグデータから人々のムードを捉える #yjtc
 
サイエンス領域におけるMLOpsの取り組み #yjtc
サイエンス領域におけるMLOpsの取り組み #yjtcサイエンス領域におけるMLOpsの取り組み #yjtc
サイエンス領域におけるMLOpsの取り組み #yjtc
 
ヤフーのAIプラットフォーム紹介 ~AIテックカンパニーを支えるデータ基盤~ #yjtc
ヤフーのAIプラットフォーム紹介 ~AIテックカンパニーを支えるデータ基盤~ #yjtcヤフーのAIプラットフォーム紹介 ~AIテックカンパニーを支えるデータ基盤~ #yjtc
ヤフーのAIプラットフォーム紹介 ~AIテックカンパニーを支えるデータ基盤~ #yjtc
 
Yahoo! JAPAN Tech Conference 2022 Day2 Keynote #yjtc
Yahoo! JAPAN Tech Conference 2022 Day2 Keynote #yjtcYahoo! JAPAN Tech Conference 2022 Day2 Keynote #yjtc
Yahoo! JAPAN Tech Conference 2022 Day2 Keynote #yjtc
 
新技術を使った次世代の商品の見せ方 ~ヤフオク!のマルチビュー機能~ #yjtc
新技術を使った次世代の商品の見せ方 ~ヤフオク!のマルチビュー機能~ #yjtc新技術を使った次世代の商品の見せ方 ~ヤフオク!のマルチビュー機能~ #yjtc
新技術を使った次世代の商品の見せ方 ~ヤフオク!のマルチビュー機能~ #yjtc
 
PC版Yahoo!メールリニューアル ~サービスのUI/UX統合と改善プロセス~ #yjtc
PC版Yahoo!メールリニューアル ~サービスのUI/UX統合と改善プロセス~ #yjtcPC版Yahoo!メールリニューアル ~サービスのUI/UX統合と改善プロセス~ #yjtc
PC版Yahoo!メールリニューアル ~サービスのUI/UX統合と改善プロセス~ #yjtc
 
モブデザインによる多職種チームのコミュニケーション改善 #yjtc
モブデザインによる多職種チームのコミュニケーション改善 #yjtcモブデザインによる多職種チームのコミュニケーション改善 #yjtc
モブデザインによる多職種チームのコミュニケーション改善 #yjtc
 
「新しいおうち探し」のためのAIアシスト検索 #yjtc
「新しいおうち探し」のためのAIアシスト検索 #yjtc「新しいおうち探し」のためのAIアシスト検索 #yjtc
「新しいおうち探し」のためのAIアシスト検索 #yjtc
 
ユーザーの地域を考慮した検索入力補助機能の改善の試み #yjtc
ユーザーの地域を考慮した検索入力補助機能の改善の試み #yjtcユーザーの地域を考慮した検索入力補助機能の改善の試み #yjtc
ユーザーの地域を考慮した検索入力補助機能の改善の試み #yjtc
 

Java Clientで入門する Apache Kafka #jjug_ccc #ccc_e2

  • 1. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 2017年5月20日 1 ヤフー株式会社 データ&サイエンスソリューション統括本部 データプラットフォーム本部 開発4部 パイプライン 森谷 大輔 Java Clientで入門する Apache Kafka JJUG CCC 2017 Spring
  • 2. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 自己紹介 • 森谷 大輔 • インフラエンジニア • どちらかというとBEアプリケーション開発 • ヤフーのデータパイプラインをつくったり運用したり • 対外発表 • ストリーム処理プラットフォームにおけるKafka導入事例 (Apache Kafka Meetup Japan #1: 2016) • Hadoop Summit 2016 @San Jose ストリーム処理関連の報告 (Stream Processing Casual Talks #1: 2016) • Kafka 0.10.0アップデート プロダクション100ノードでやってみた (D&S Data Night vol.03: 2016) • 噛み砕いてKafka Streams (Apache Kafka Meetup Japan #2: 2016) • Elasticsearch 5.2とJava Clientで戯れる (第18回Elasticsearch勉強会: 2017) 2
  • 3. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. ゴール(と注意) Kafkaをこれから始めたい、始めたばか りの人向けにKafkaの基本を実演ベース で押さえて帰ってもらう • ※既にガンガン使ってるぜという人は退屈 かも、でもちょっとはいい情報もあるかも • ※現行最新のバージョン0.10.2.0を前提 3
  • 4. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. アジェンダ • Kafkaとは? • Kafkaの基本 • Java ClientでKafkaを体感する • まとめ 4
  • 5. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. Kafkaとは? 5 時間を割きます
  • 6. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. Apache Kafka スケーラブルな分散pub/sub型 メッセージングシステムを実現するために LinkedInが開発してOSS化した (2011年~) Apacheトップレベルプロジェクトで配布(2012年~) 6
  • 7. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 実績 7 https://kafka.apache.org/powered-by から一部を抜粋 Fortune 500の内 実に3分の1がKafkaを 利用しているらしい
  • 8. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. Kafka Summit • Confluent, inc.が主催 • SF (2016/4, 2017/8), NY (2017/5) 8
  • 9. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. ユーザ会 • Apache Kafka JP • https://kafka-apache-jp.connpass.com/ 9 https://kafka.apache.org/events
  • 10. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. Apache Kafka スケーラブルな分散pub/sub型 メッセージングシステムを実現するために LinkedInが開発してOSS化した (2011年~) Apacheトップレベルプロジェクトで配布(2012年~) 10
  • 11. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. publish/subscribeモデル 11 • Wikipediaには出版-購読型モデルとある • データの送受信のかたち • データの送信者(publisher)は受信者(subscriber)を気にしないでどんどん 送る • 受信者は送信者を気にせず自分のタイミングで取る publisher publisher publisher 仲介者 subscriber subscriber subscriber
  • 12. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. publish/subscribeモデル 12 • つまりpublisherとsubscriberを非同期に分離した • もしPUSH, PUSHだとどんな問題がある? publisher publisher publisher 仲介者 subscriber subscriber subscriber PULLPUSH 疎結合化
  • 13. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 具体的にはなんの用途で使うの? 13 • 2つ • データパイプライン • ストリーム処理 と公式docのトップにもある
  • 14. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. データパイプライン 14 Data Source Data Source Data Source RDBMS
  • 15. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. データパイプライン 15 Data Source Data Source Data Source RDBMS Data Source ストリーム処理 Data Source Data Source
  • 16. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. データパイプライン 16 Data Source Data Source Data Source RDBMS Data Source ストリーム処理 Data Source Data Source データレイク・・・ マイクロサービス・・・
  • 17. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. データパイプライン 17 Data Source Data Source Data Source RDBMS Data Source ストリーム処理 Data Source Data Source
  • 18. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. ストリーム(リアルタイム)処理 18 • 課題: このデイリーバッチが終わる明朝まで分析がで きないよ・・・ • ASAPの意思決定
  • 19. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. ストリーム(リアルタイム)処理 19 • モジュールの日次クリック率推移を知りたい • モジュールのクリック率急増を知りたい • 遅延が多い路線を知りたい • 電車の遅延を知りたい • 2016年に話題になったツイートワードを知りたい • 今見ているテレビ番組のバズツイートワードを知りたい • ABテストの分析をしたい • 非常に悪い結果を出しているバケットテストをすぐに停止したい • マシンの故障率を知りたい • マシンが故障しそうになったら知りたい • ユーザの平均的な興味から広告を出したい • ユーザが今だけ興味を持っている広告を出したい 変化の通知が、実際に変化した点から時 間が経つに連れて価値が低下する 高価値 数秒〜10分 価値の低下 バッチ ストリーム
  • 20. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. ストリーム(リアルタイム)処理 20 • ストリーミングデータ • 終わりがない、連続的に発生するデータ • を処理するためにはキューイングの機能が必要 • 類似:ActiveMQ, RabbitMQ, ZeroMQ, Redis • https://www.slideshare.net/laclefyoshi/ss-67658888
  • 21. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. Kafkaは • データパイプラインをシンプルにする • ストリーミングデータを扱える を両方実現できるように設計された • 特徴 • バッチ・リアルタイム分析共にサポート • 受け取ったレコードは直ちに永続化 • スケーラビリティ • デイリー1兆4千万のレコードを捌く@LinkedIn • フォールトトレラント 21
  • 22. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. Kafkaの基本 22
  • 23. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. pub/sub 23 publisher publisher publisher 仲介者 subscriber subscriber subscriber
  • 24. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. Kafkaを構成する4コンポーネント 24 Producer Producer Producer Broker Consumer Consumer Consumer ZooKeeper狭義にはこれだけを Kafkaと言うこともある
  • 25. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.25 • Producer • Consumer • Broker • ZooKeeper Kafkaを構成する4コンポーネント
  • 26. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. ZooKeeper 26 • Apache ZooKeeper • 可用性と信頼性の高い分散コーディネーションシステム (詳細は割愛) • Hadoop等でも使われるOSS • Kafkaでは↓のために使われる • クラスタマネジメント • 死活管理 • ACL情報のストア
  • 27. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. Message 27 Producer Producer Producer Broker Consumer Consumer Consumer ZooKeeper Message(=Record) • Kafka独自フォーマットのバイナリ • keyとvalueとtimestamp等のメタデータで構 成 • key, valueはユーザ任意の型
  • 28. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. Topic 28 Producer Producer Producer Broker Consumer Consumer Consumer weblog purchase customer Topic • Messageストリームのラベル • ユーザが名付ける • Producerは1個か複数のtopicにMessageを投げ る
  • 29. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. Partition 29 Producer weblog: partition purchase: partition • Topicはさらに負荷分散のた めにPartitionに分割される • Partition数はTopic毎にユー ザが決める • Partition数は増やせるが減ら せない weblog: partition purchase: partition weblog: partition purchase: partition
  • 30. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. Producer: key partitioning 30 Producer weblog: partition purchase: partition weblog: partition purchase: partition weblog: partition purchase: partition • keyのハッシュ値から投入先 partitionを決定する • 同じkeyのMessageは同じ partitionに投入される • keyを指定しなければラウンド ロビン • またはpartition割り振りロジッ クをユーザがカスタマイズす る
  • 31. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. Log 31 Producer weblog: partition purchase: partition weblog: partition purchase: partition weblog: partition purchase: partition • partitionは任意のディレクトリ パスにファイルとして永続化 される • これをLogという • 紛らわしいことにKafkaそのも ののシステムログも別に存在 する、がそれではない • 保持期間が指定できる
  • 32. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. Consumer Group 32 Producer Broker Consumer Consumer Consumer purchase • グルーピングされたconsumerは他のconsumerを 気にせずtopicのMessageを漏れなく分散 consumeする group.id=shopping group.id=marketing
  • 33. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. Offset 33 Consumer Consumer Consumer group.id=shopping group.id=marketing ということはConsumer Group毎に どこまで読んだかをConsumerが覚えている partition 0 0 1 2 partition 1 0 1
  • 34. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. Offset 34 Consumer Consumer Consumer group.id=shopping group.id=marketing partition 0 0 1 2 partition 1 0 1 Offsetは一度決まったら変わらない • 「group.id=shoppingとしてtopic=purchaseのpartition=0のoffset=2まで読ん だ」 • この情報はKafkaの専用topicに書き込まれる
  • 35. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. Java ClientでKafkaを体 感する 35
  • 36. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. Java Client • Producer, Consumer APIとしてJava Client が公式に用意されている • しかし3rdパーティ製で他言語でも使える (C/C++, Go, Python等) • 特にConsumerはアプリケーションコードを書 くことが多い 36
  • 37. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. Consumer Client • 特にConsumerはアプリケーションコードを書くことが 多い • よりハイレベルなAPIやフレームワークもある • Java Clientは最もローレベルなAPIともいえる 37 Kafka Streams
  • 38. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. ハイレベルAPIがあるのにわざわざ ローレベルAPIの使い方を見る必要がある? ある • ハイレベルAPIを使いこなすのは簡単でない、Java Clientを把握 していることはハイレベルAPIを使いこなす上でとても有用 • フレームワークは構築から試すまでがかなり大変、ちょっとした アプリやテストならJava Clientが一番低コストだったり • ローレベルといっても直感的でないわけではない • (旧APIのSimpleConsumerさんとはわけが違う) 38
  • 39. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. これから試すこと • Kafkaアプリケーションの全ての基本 • サンプルデータをProducerがBrokerにproduce する • ConsumerがBrokerからそのデータをconsume して確認する 39 Producer Broker Consumer k: null, v: “こんにちは世界” “こんにちは世界” ?
  • 40. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. どうやって動作確認する? • Producer, Consumer, Broker, ZooKeeper 1. ZooKeeper, Kafkaを開発機にインストール 2. ZooKeeper daemonとBroker daemonを起動して 3. お試しProducerコードを書いてjarを配備して起動して 4. お試しConsumerコードを書いてjarを配備して起動して 40
  • 41. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 面倒! • フレームワークだともっと面倒 41
  • 42. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. これがあれば一連の流れが試せる 4つの最低限コンポーネント • ZooKeeper: JVMで動く • Kafka Broker: JVMで動く • Kafka Producer: JVMで動く • Kafka Consumer: JVMで動く • Javaコードペラ一枚でできるのでは? 42
  • 43. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. A. できる • つまりJUnit上で試せる • Kafkaアプリケーションを開発するときはこ の手を使ってテストすると良い • ConsumerがStormやKafka Streamsだった としても、それもJVMなので同じ手が使える 43
  • 44. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. • ZooKeeperとBrokerをJavaコード上で起動する方法は公 式docのFAQにある • https://cwiki.apache.org/confluence/display/KAFKA/FAQ#FAQ-Unittesting • やや長いのでライブラリを作って一行くらいで起動できる ようにしておくと吉 • 今回はすみません、自作のものを使います • 使い勝手は違いますが基本やっていることはFAQと同じ 44
  • 45. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. Java Client【とJUnit】 でKafkaを体感する (今度こそ) 45
  • 46. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. これから試すこと(再掲) • Kafkaアプリケーションの全ての基本 • サンプルデータをProducerがBrokerにproduce する • ConsumerがBrokerからそのデータをconsume して確認する 46 Producer Broker Consumer k: null, v: “こんにちは世界” “こんにちは世界” ?
  • 47. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. デモ1 • pom • テストコード • broker partitionの実体を見てみましょう • Producer, ConsumerのJavaDoc • https://kafka.apache.org/0102/javadoc/index.html?org/apache/kafka/clients/producer/KafkaProducer.html • https://kafka.apache.org/0102/javadoc/index.html?org/apache/kafka/clients/consumer/KafkaConsumer.html 47
  • 48. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. Consumer Groupを体感する 48 Producer Broker Consumer test-topic group.id=B Consumer group.id=A • Aというgroup.idとBというgroup.idで同じ topicのMessageを読んでみる
  • 49. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. デモ2 49
  • 50. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. • 5件投げたら5件ずつ、合計10件読 めた • consumer group BをAに変えてもう 一回試すとどうなるか 50
  • 51. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. デモ2.1 51
  • 52. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. • 1スレッドだけが5件読んでもう1スレッドは働 かなかった • なぜかは後で • とりあえずconsumer groupを分ければ別とし て読めることがわかった 52
  • 53. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. partitioningで負荷分散を体感する • topic毎にpartition数を指定できる • partition=1だとBroker nodeを何台増やしても拡張しない • 1partitionは1Consumerからしか読まれない • 1partitionを2Consumerから同時に読むことはできない、 2partitionなら可能 • さっき1スレッドだけが5件読んでもう1スレッドが働かな かった理由はそれ 53
  • 54. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. デモ3 • partition数を2にしてさっきのコードを実行して みます • broker partitionの実体も変わっていることを確 認 54
  • 55. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 今回は同プロセス内スレッドで分散さ せたが、本番ではnode間で分散され ることになるはず 55
  • 56. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. key partitioning • Aさんのログイン失敗が30分以内に5回以上を検知 • Kafka Consumerで実装した場合 56 partition 0 partition 1 partition 2 2回失敗 ? 2回失敗 ? 1回失敗 ?Consumer Consumer Consumer
  • 57. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. こんなときに使える • keyでgroupingして集約したい • keyでストリームデータ同士をjoinしたい • uniqueKeyを入れてウィンドウで重複除 去したい 57
  • 58. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. デモ4 • Aという文字列をkeyに入れてさっきの 2partitionに投げてみます • さっきは分散したが今回は? 58
  • 59. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. デモ5 • 圧縮 • するとしないのとではネットワークトラフィック、 Brokerのディスク消費が大きく変わる • その代わりCPUを食う • gzip, snappy, lz4 • Consumerで読むときはなにで圧縮されたか気 にする必要は無い 59
  • 60. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. マルチスレッド実装の注意点 • テストのためにConsumerはマルチスレッドで試してきた • 本番でも性能を出すために恐らくマルチスレッド実装する • KafkaProducerクラスはスレッドセーフ • KafkaConsumerクラスはスレッドセーフではない (※wakeupメソッドだけ例外) • Consumerオブジェクトをスレッド間で共有して操作すると ConcurrentModificationException • 各スレッドで作るようにすればOK 60
  • 61. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. KafkaConsumer 0.10.2で使える便利メソッド紹介 61 返り値型 メソッド 機能、使いどころ void • commitSync() • commitSync(Map<TopicPartition, OffsetAndMetadata> offsets) • commitAsync(OffsetCommitCallback callback) Offsetのコミットを自動定期に任せない場合、自分でOffset コミットしたいタイミングを指定する。 特定のpartitionについて特定のOffsetでコミット、ということ もできる。 処理を含めてAt-least-onceを実現する場合は必須。 Map<TopicPar tition, OffsetAndTim estamp> • offsetsForTimes(Map<TopicPartition, Long> timestampsToSearch) 最近追加された強力な機能。 MessageのtimestampからOffsetを逆引きする。 下記のseekと合わせて使うことで何時何分のデータから何 時何分のデータを再度consumeし直すといったユースケー スを実現できる。 void • seek(TopicPartition partition, long offset) • seekToBeginning(Collection<TopicPartition> partitions) • seekToEnd(Collection<TopicPartition> partitions) 今読んでいるOffsetを途中で変える機能。 ほとんどのConsumerアプリケーションで稼働中に任意に Offsetを変えたい要望が出てくるので重要度が高いメソッド。 void • pause(Collection<TopicPartition> partitions) • resume(Collection<TopicPartition> partitions) 特定のpartitionのconsumeを一時停止したり再開させたり する。「今だけ特定のpartitionのconsumeに集中させたい」 といった要件を実現する。 便利だが実装がやや難しい。
  • 62. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. まとめ 62
  • 63. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. このセッションで • どんなときにKafkaを使うといいかわかった • Kafkaを試すために最低限必要なコンポーネントを覚えた • JUnitでKafkaを試せることがわかった • Java ClientでKafkaのpartitioning, Consumer Groupの機 能を体感した • マルチスレッドConsumerアプリケーションを書く上で最低 限注意すべきことがわかった 63
  • 64. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. Kafka Meetup JP #3 7/6(木)開催 64 以下connpassで案内予定 https://kafka-apache-jp.connpass.com/ 会場は LODGE@ヤフー