15
At least onceってぶっちゃ け問題の先送りだったよね - Apache Kafka Meetup Japan #3 - @shoe116

At least onceってぶっちゃけ問題の先送りだったよね #kafkajp

  • Upload
    yahoo

  • View
    1.388

  • Download
    0

Embed Size (px)

Citation preview

Page 1: At least onceってぶっちゃけ問題の先送りだったよね #kafkajp

At least onceってぶっちゃけ問題の先送りだったよね

- Apache Kafka Meetup Japan #3 -

@shoe116

Page 2: At least onceってぶっちゃけ問題の先送りだったよね #kafkajp

アジェンダ1. はじめに:自己紹介とsemanticsについて

2. 言い訳をするしかない状況についての共有と謝罪

3. at least onceとETL苦労話

4. KIP-98, 129で解決すること、しないこと

Page 3: At least onceってぶっちゃけ問題の先送りだったよね #kafkajp

1. はじめに

Page 4: At least onceってぶっちゃけ問題の先送りだったよね #kafkajp

1.1 about me•広告系→データ分析屋→HadoopでETL

•利用なう:Storm/Tez/Hive. Kafkaはconsumeのみ

•Java = Python > JavaScript > C++

•No Music, No Life. No Music, No Idol.

•課外活動はこちら•https://shoe116.tumblr.com/

Page 5: At least onceってぶっちゃけ問題の先送りだったよね #kafkajp

1. at least once(少なくとも1回)•重複するかもしれないが、欠損はしない

2. at most once(最大1回)•欠損するかもしれないが、重複はしない

3. exactly once(正確に1回)•欠損も重複もしない•分散システムだと実装が非常に困難

1.2 semanticsについて

Page 6: At least onceってぶっちゃけ問題の先送りだったよね #kafkajp

2. 言い訳をするしかない状況についての共有と謝罪

Page 7: At least onceってぶっちゃけ問題の先送りだったよね #kafkajp

• at least onceだと、ETLする側としては「重複をどうするか問題」は避けられないし、カジュアルに頼まれます•ここでLTすることになった当時(6月上旬)では確かにkafkaはexactly onceをサポートしてなくて、かつて僕はkafka由来の重複排除の仕組みを考えました•それが、6/30(現地時間)のkafka0.11のリリースでexactly once(KPI-98, 129)対応がされて、僕が作ったモノとLTで話すネタはオワコン化した可能性が・・・• exactly once semanticsの詳しい話したかったけどコードまでは読む時間なかったです、ごめんなさい•噂によると懇親会中に実装の解説してくれるらしいよ

Page 8: At least onceってぶっちゃけ問題の先送りだったよね #kafkajp

3. at least onceと重複排除苦労話

Page 9: At least onceってぶっちゃけ問題の先送りだったよね #kafkajp

3.1 弊社のデータパイプライン

producer(DC1) kafka

(DC4)storm(DC4)

TEZ(DC4)

Hive(DC4)

kafka(DC1)

producer(DC2)

kafka(DC2)

kafka(DC5)

storm(DC5)

TEZ(DC5)

Hive(DC5)

producer(DC3)

kafka(DC3)

At Least Once At Least Once

Exactly once ( & unify)Partitioning

At Least Once

At Least Once

At Least Once

Page 10: At least onceってぶっちゃけ問題の先送りだったよね #kafkajp

3.2 重複排除の方法1. kafkaのmessageにIDを埋めてproduce

2. HDFSにIDをkey, DATAをvalueにしてwrite

3. TezでIDをkeyにshuffleして重複排除処理

ID: asdfghjkl;:]Body: {aaa, bbb, ccc}ID: asdfghjkl;:]

Body: {aaa, bbb, ccc}ID: asdfghjkl;:]DATA: {aaa, bbb, ccc}

kafka storm

HDFS

$ID $DATA$ID $DATA$ID $DATA$ID $DATA$ID $DATA$ID $DATA$ID $DATA

TEZ

HDFS

$ID $DATA$ID $DATA$ID $DATA$ID $DATA$ID $DATA

Page 11: At least onceってぶっちゃけ問題の先送りだったよね #kafkajp

3.2 重複排除にまつわる苦労話

1. 完全な意味での重複排除は困難•読み込める重複IDの量には限りがある• time windowを決めてその中で排除するしかない

2. パイプラインの正常稼働をどう担保するか• at least once = 件数はそのままor増える•重複排除 = 件数はそのままor減る•「件数が同じならOK」みたいな確認はできなくなる

Page 12: At least onceってぶっちゃけ問題の先送りだったよね #kafkajp

4. KIP-98, 129で解決すること、しないこと

Page 13: At least onceってぶっちゃけ問題の先送りだったよね #kafkajp

4.1 KIP-98, 129で新規追加1. Partition単位でのidempotentなproduce• producerでsequentialなIDを発行•messageとともにIDをbrokerに送ってhandlingする

2. 複数partitionに対するtransactionalなwrite•ごくごく一般的なTwo-Phase Commit• producerがtransactionをbegin, commit, abort

3. 同一Kafka内でのexactly-once stream処理•messageのsendとoffsetのcommitを1リクエストで行う

Page 14: At least onceってぶっちゃけ問題の先送りだったよね #kafkajp

4.2 KIP-98, 129で解決しない

1. Exactly onceなKafka mirroring•MirrorMakerはクラスタをまたぐ•クラスタまたぎのTransactionは管理されない

2. Kafka以外のコンポーネントに書き出す場合•これまで通り、書き出す側でのstateの管理が必要

3. オペレーション/実装のミスでmessageがダブってproduceされる場合(当然)

Page 15: At least onceってぶっちゃけ問題の先送りだったよね #kafkajp

関連資料• https://archive.apache.org/dist/kafka/0.11.0.0/RELEASE_NOTES.html

• https://www.confluent.io/blog/exactly-once-semantics-are-possible-heres-how-apache-kafka-does-it/

• https://cwiki.apache.org/confluence/display/KAFKA/KIP-98+-+Exactly+Once+Delivery+and+Transactional+Messaging