1

私のアプリケーションでは、プロデューサーとコンシューマーが Java API を使用してデータを圧縮および解凍した場合、解凍されたデータを問題なく消費する Kafka 高レベル コンシューマーを使用しています。

プロデューサがlibrdkafka C++ API を圧縮 (snappy または GZIP) に使用するとどうなりますか? 上記の場合と同様に、Java コンシューマーは透過的に解凍できますか。コンシューマ側のフェッチ サイズはどうなりますか? これも透過的に処理されますか。

単純なコンシューマー モデルを使用してカフカ コンシューマーを設計するとどうなりますか? プロデューサーからの圧縮データを明示的に解凍する必要がありますか (ここではlibrdkafka C++ API を使用すると仮定します)。

プロデューサ側のlibrdkafka C++ APIで圧縮が発生した場合、高レベルのコンシューマが機能しない可能性があると考えていますか? ここでKafka message codec - compress and decompress という他の投稿を見たので、ここで間違っている場合はクリアしてください。これとは対照的に、高レベルの消費者がhttp://grokbase.com/t/kafka/users/142veppeyv/unable-to-consume-snappy-compressed-messages-with-simpleを使用した場合、解凍が機能するはずであると言う別のリンクを見つけました-消費者

ありがとう

4

2 に答える 2

3

それらは互換性があり、librdkafka は Scala/Java クライアントと同じ圧縮とフレーミングを使用します。

値を大きくfetch.message.max.bytesすると、コンシューマーはより大きなメッセージ、または各リクエストでより大きなメッセージのバッチをフェッチできますが、プロデューサーがこの値よりも大きなメッセージを生成しない限り、通常はデフォルト値のままにしておくことができます。その場合は、 も増やす必要がありますmessage.max.bytes

圧縮はプロデューサーでのみ構成されます。各メッセージ (またはメッセージのバッチ) には圧縮タイプ (none、snappy、gzip など) のフラグが付けられるため、コンシューマー側での構成は必要ありません。

于 2015-01-22T21:41:40.130 に答える