kafka logをオブジェクトストレージに連携する方法まとめ

19
Kafka logをオブジェクトストレージに 連携する⽅法まとめ Apache Kafka Meetup Japan #2 2016/12/15 Future Architect Inc, Keigo Suda

Upload: keigo-suda

Post on 16-Apr-2017

420 views

Category:

Internet


0 download

TRANSCRIPT

Page 1: Kafka logをオブジェクトストレージに連携する方法まとめ

Kafka logをオブジェクトストレージに連携する⽅法まとめ

Apache Kafka Meetup Japan #22016/12/15

Future Architect Inc,Keigo Suda

Page 2: Kafka logをオブジェクトストレージに連携する方法まとめ

お話することl Kafkaのlogデータをオブジェクトストレージにアーカイブする必要があったので、

その時に⾊々と調べたのでその時の話(主にOSS)

l 要は⼈柱になったよって話

どうやろう?

Page 3: Kafka logをオブジェクトストレージに連携する方法まとめ

* Technology Innovation Group スペシャリスト* 今の専⾨ -> ⼤きいデータを扱う領域(インフラ〜アプリ)* 最近はもっぱらKafkaとストリーム処理エンジンの諸々

須⽥桂伍 (すだ けいご)

keigodasu

Page 4: Kafka logをオブジェクトストレージに連携する方法まとめ

もとめてた要件l 最低限⼈が直接読める形で書き出したい

l あわよくばParquetとか他のファイルフォーマットでも出せると何かと便利かも

l なるべくソーシャルの⼒に頼りたい(ぶっちゃけ作るモチベーションあがらないw)

l アーカイブ⽬的なので⾮機能⾯はあまり重視していない

Page 5: Kafka logをオブジェクトストレージに連携する方法まとめ

選択肢l Kafka Connectl Secorl Embulk

Page 6: Kafka logをオブジェクトストレージに連携する方法まとめ

選択肢l Kafka Connect(実際に試した)l Secor(実際に試した)l Embulk(Kafka to S3は試してない)

Page 7: Kafka logをオブジェクトストレージに連携する方法まとめ

Kafka Connectl Kafkaとデータをやりとりするためのフレームワーク

l Kafkaの0.9より導⼊された機能でKafkaへのIn/Outが実装可能l http://www.slideshare.net/keigosuda/apache-kafka-kafka-connect-

etl-70167024

l 設定ファイルベースで挙動をコントロールl コネクタアプリさえ作ればあとは設定ファイルで操作

l S3へのSinkコネクターは以下l https://github.com/qubole/streamxl https://github.com/DeviantArt/kafka-connect-s3

Page 8: Kafka logをオブジェクトストレージに連携する方法まとめ

設定例(streamxの場合)l 設定ファイルを書いてKafka Connect起動コマンドを実⾏するだけ

Page 9: Kafka logをオブジェクトストレージに連携する方法まとめ

設定例(kafka-connect-s3の場合)l 設定ファイルを書いてKafka Connect起動コマンドを実⾏するだけ

Page 10: Kafka logをオブジェクトストレージに連携する方法まとめ

実⾏例(スタンドアローンの例)l 設定ファイルを引数に指定して起動コマンドを実⾏

l 第1引数: Kafka Connect⾃体の設定ファイルl 第2引数: コネクタ固有の設定ファイル

bin/connect-standalone.sh ¥config/connect-standalone.properties ¥streamx/config/quickstart-s3.properties

Page 11: Kafka logをオブジェクトストレージに連携する方法まとめ

所 感l streamx

l Confuluentのkafka-connect-hdfsをフォークしているl だからいろんなファイルフォーットでの書き出し対応しているのをウリにしているl サンプルにあったテキストでS3に書き出す例は問題なく動くl が!!肝⼼なそれ以外のやり⽅がわからない(え、またソース追うんすか・・・)

l kafka-connect-s3l テキスト出⼒しか対応していないため作り⾃体はシンプルl ちゃんとflush()とかonPartitionsAssigned()とか実装しているl が!!Kafka 0.9系しか対応してない

Page 12: Kafka logをオブジェクトストレージに連携する方法まとめ

そうですか・・・l コネクタの対応バージョンは気をつけた⽅がよさげl 0.9と0.10でのAPI互換がないらしい

Page 13: Kafka logをオブジェクトストレージに連携する方法まとめ

Secorl Pinterestが公開しているOSS

l https://github.com/pinterest/secor

l 設定ファイルベースで挙動をコントロールl 実態は普通にConsumeして書き出すだけ

l 様々なファイルフォーマットでの書き出しに対応l Textl Seaquencefilel Parquet l Gzip

Page 14: Kafka logをオブジェクトストレージに連携する方法まとめ

設定例l 設定可能な情報がかなりおおいが、主だったものは以下の通り

# Kafka/Zookeeperの接続情報zookeeper.kafka.seed.broker.host=172.31.28.60zookeeper.quorum=172.31.28.60:2181

# 連携する/しないトピック情報secor.kafka.topic_filter=test_topicsecor.kafka.topic_blacklist=exclueded_topic

# 連携先のS3情報stored.secor.s3.bucket=secorteststored.secor.s3.path=secor

# アップロードのトリガーsecor.max.file.size.bytes=100secor.max.file.age.seconds=10

# ファイルフォーマットsecor.file.reader.writer.factory=com.pinterest.secor.io.impl.DelimitedTextFileReaderWriterFactory

Page 15: Kafka logをオブジェクトストレージに連携する方法まとめ

使い⽅l 以下を起動時の引数に指定して実⾏

l secor_group・・・S3に書き出す際のまとめかたl log4j.configuration・・・ログ(log4j)の設定l Config・・・Secor⾃体の設定l 実⾏クラス・・・実⾏するクラス

java –ea ¥-Dsecor_group=secor_backup ¥-Dlog4j.configuration=log4j.prod.properties ¥-Dconfig=secor.prod.backup.properties ¥-cp secor-0.1-SNAPSHOT.jar:lib/* ¥com.pinterest.secor.main.ConsumerMain

Page 16: Kafka logをオブジェクトストレージに連携する方法まとめ

ちょっとした注意点l Kafkaの0.10で使う場合はビルド時にバージョンを指定する必要あり

l デファオルとだと0.8向け

l 設定ファイルは分割可能で、サンプルで配置されているものも分割されているのでちょっと注意

$ mvn -Pkafka-0.10-dev package

include=secor.common.properties

Page 17: Kafka logをオブジェクトストレージに連携する方法まとめ

結局l 現状だとSecorがちゃんとしているので、これを使っている

l いろいろできるみたいだが、使いこなせていない感も

Page 18: Kafka logをオブジェクトストレージに連携する方法まとめ

まとめl オブジェクトストレージへの連携をまじめにやっているのはSecorぐらいな気が

l Kafkaのエコシステム群、ちょっと⾃由すぎてつらいw

Page 19: Kafka logをオブジェクトストレージに連携する方法まとめ

ありがとうございました!!