生涯未熟

プログラミングをちょこちょこと。

kafka2.0にした時にShopify/saramaでCRCエラーが出る件

皆さん、Goでkafkaやっとりますか?僕はバリバリ伝説な感じでバリバリやっとります。
というわけで、最近kafka2.0がリリースされましたね。
うちでも使うかと2.0にアップグレードしたんですが、見事にsaramaを使ったGo製のProducer/Consumerが死にました、南無。

突然の死

メッセージ受け取った瞬間、こんな感じで死にました。

2999-19-05T10:39:05.798+0900    error    Failed receive message    {"error": "kafka: error while consuming hoge/0: kafka: error decoding packet: CRC didn't match expected 0x0 got 0xe38a6876"}

あじゃぱ〜。
こりゃ2.0の速にsaramaがついていっておらんなとISSUEを掘りにいきました。

イッシュー

github.com

そうそうこれこれ。
wladhさんが見てくれて解説してくれてますね。

で、問題解決PRがこれ。

github.com

斜め読みするとkafka2.0から導入されたメッセージチャンクのダウンコンバートのせいでオフセットがズレてデコードエラーになったっぽいですね、知らんけど。

メッセージチャンクについてはこの辺の記事が関連。

KIP-283: Efficient Memory Usage for Down-Conversion - Apache Kafka - Apache Software Foundation

解決

なので、とりあえずこのPRを適応すれば動くようになります。
今の所、最新のmaster branchには突っ込まれているので適宜追従しておきましょう。