(重要)ただの推測で裏取りが出来ているわけではない話なので、そのつもりで読んでください。
Kafka rest proxy でメッセージを Produce する際は、一般的には次のように送り込んでいると思う。
$ curl -X POST http://localhost:8082/topics/name \
-H Content-Type:application/vnd.kafka.json.v2+json \
--data '{"records":[{"value":"test"}]}'
上の例では json として埋め込んでいるけれども、binary として埋め込むこともできる。
$ curl -X POST http://localhost:8082/topics/name \
-H Content-Type:application/vnd.kafka.binary.v2+json \
--data '{"records":[{"value":"dGVzdAo="}]}'
公式ドキュメントでは、そのほかのパターンも記載されている。もっと言うと application/json
も後方互換性として残されていると記載されている。ところがメッセージを Produce する際にはこれは使えない。なぜだろうか。
ソースコードを眺めると、次のように書いてある。
// These are defaults that track the most recent API version. These should always be specified
// anywhere the latest version is produced/consumed.
public static final String JSON = "application/json";
現行の API では使えそうな雰囲気をだしている。ドキュメントに戻ると、省略時は embed は binary と解釈すると書かれているので、上の二つ目の例の形で良さそうだが、動作しない。
解釈をすすめると most recent API というのは、ひょっとすると V3 API のことを指すのかもしれない。おそらく most recent API と書いた人は、バージョンが上がるたびに API セット全体が更新されるイメージを持って書いていたようだ。ところが実際の V3 API は API セット全体を更新するものではなく、既存の API に cluster 操作を追加した増築部分を指している。おそらくここでねじれたと思われる。application/json
は V2 API では使用できなくなり、よって後方互換性もなくなった、と。残念。