kafka logをオブジェクトストレージに連携する方法まとめ
TRANSCRIPT
Kafka logをオブジェクトストレージに連携する⽅法まとめ
Apache Kafka Meetup Japan #22016/12/15
Future Architect Inc,Keigo Suda
お話することl Kafkaのlogデータをオブジェクトストレージにアーカイブする必要があったので、
その時に⾊々と調べたのでその時の話(主にOSS)
l 要は⼈柱になったよって話
どうやろう?
* Technology Innovation Group スペシャリスト* 今の専⾨ -> ⼤きいデータを扱う領域(インフラ〜アプリ)* 最近はもっぱらKafkaとストリーム処理エンジンの諸々
須⽥桂伍 (すだ けいご)
keigodasu
もとめてた要件l 最低限⼈が直接読める形で書き出したい
l あわよくばParquetとか他のファイルフォーマットでも出せると何かと便利かも
l なるべくソーシャルの⼒に頼りたい(ぶっちゃけ作るモチベーションあがらないw)
l アーカイブ⽬的なので⾮機能⾯はあまり重視していない
選択肢l Kafka Connectl Secorl Embulk
選択肢l Kafka Connect(実際に試した)l Secor(実際に試した)l Embulk(Kafka to S3は試してない)
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
設定例(streamxの場合)l 設定ファイルを書いてKafka Connect起動コマンドを実⾏するだけ
設定例(kafka-connect-s3の場合)l 設定ファイルを書いてKafka Connect起動コマンドを実⾏するだけ
実⾏例(スタンドアローンの例)l 設定ファイルを引数に指定して起動コマンドを実⾏
l 第1引数: Kafka Connect⾃体の設定ファイルl 第2引数: コネクタ固有の設定ファイル
bin/connect-standalone.sh ¥config/connect-standalone.properties ¥streamx/config/quickstart-s3.properties
所 感l streamx
l Confuluentのkafka-connect-hdfsをフォークしているl だからいろんなファイルフォーットでの書き出し対応しているのをウリにしているl サンプルにあったテキストでS3に書き出す例は問題なく動くl が!!肝⼼なそれ以外のやり⽅がわからない(え、またソース追うんすか・・・)
l kafka-connect-s3l テキスト出⼒しか対応していないため作り⾃体はシンプルl ちゃんとflush()とかonPartitionsAssigned()とか実装しているl が!!Kafka 0.9系しか対応してない
そうですか・・・l コネクタの対応バージョンは気をつけた⽅がよさげl 0.9と0.10でのAPI互換がないらしい
Secorl Pinterestが公開しているOSS
l https://github.com/pinterest/secor
l 設定ファイルベースで挙動をコントロールl 実態は普通にConsumeして書き出すだけ
l 様々なファイルフォーマットでの書き出しに対応l Textl Seaquencefilel Parquet l Gzip
設定例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
使い⽅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
ちょっとした注意点l Kafkaの0.10で使う場合はビルド時にバージョンを指定する必要あり
l デファオルとだと0.8向け
l 設定ファイルは分割可能で、サンプルで配置されているものも分割されているのでちょっと注意
$ mvn -Pkafka-0.10-dev package
include=secor.common.properties
結局l 現状だとSecorがちゃんとしているので、これを使っている
l いろいろできるみたいだが、使いこなせていない感も
まとめl オブジェクトストレージへの連携をまじめにやっているのはSecorぐらいな気が
l Kafkaのエコシステム群、ちょっと⾃由すぎてつらいw
ありがとうございました!!