web-dev-qa-db-ja.com

Kafka:シリアル化されたときのメッセージが、max.request.size構成で構成した最大要求サイズより大きい

次のエラーが発生しました(Kafka 2.1.0):

2018-12-03 21:22:37.873エラー37645 --- [nio-8080-exec-1] osksupport.LoggingProducerListener:key = 'null'およびpayload = '{82、73、 70、70、36、96、19、0、87、65、86、69、102、109、116、32、16、0、0、0、1、0、1、0、68、-84。 .. 'トピックrecieved_soundへ:org.Apache.kafka.common.errors.RecordTooLargeException:シリアル化すると、メッセージは1269892バイトになり、max.request.size構成で構成した最大リクエストサイズよりも大きくなります。

さまざまなSO投稿ですべての提案を試しました。

私のProducer.properties:

max.request.size=41943040
message.max.bytes=41943040
replica.fetch.max.bytes=41943040
fetch.message.max.bytes=41943040

Server.properties:

socket.request.max.bytes=104857600
message.max.bytes=41943040
max.request.size=41943040
replica.fetch.max.bytes=41943040
fetch.message.max.bytes=41943040

ProducerConfig(スプリングブート):

configProps.put("message.max.bytes", "41943040");
configProps.put("max.request.size", "41943040");
configProps.put("replica.fetch.max.bytes", "41943040");
configProps.put("fetch.message.max.bytes", "41943040");

ConsumerConfig(SpringBoot):

props.put("fetch.message.max.bytes", "41943040");
props.put("message.max.bytes", "41943040");
props.put("max.request.size", "41943040");
props.put("replica.fetch.max.bytes", "41943040");
props.put("fetch.message.max.bytes", "41943040");

また、最後の2つのファイルで文字列を数値に変更しました。ブローカーを複数回開始し、新しいトピックを作成しました。 org.Apache.kafka.common.errors.RecordTooLargeException: The request included a message larger than the max message size the server will accept最初はエラーでしたが、これらの変更によって修正されましたが、この新しいエラーではまだ運がありません。

5
sapy

KafkaProducer.ensureValidRecordSize()にブレークポイントを設定して、何が起こっているかを確認します。

このアプリで

@SpringBootApplication
public class So53605262Application {

    public static void main(String[] args) {
        SpringApplication.run(So53605262Application.class, args);
    }

    @Bean
    public NewTopic topic() {
        return new NewTopic("so53605262", 1, (short) 1);
    }

    @Bean
    public ApplicationRunner runner(KafkaTemplate<String, String> template) {
        return args -> template.send("so53605262", new String(new byte[1024 * 1024 * 2]));
    }

}

私は得る

シリアル化すると、メッセージは2097240バイトになり、max.request.size構成で構成した最大要求サイズよりも大きくなります。

予想通り;追加したとき

spring.kafka.producer.properties.max.request.size=3000000

(これは設定と同等ですが、Spring Bootプロパティを使用しています)、

リクエストには、サーバーが受け入れる最大メッセージサイズより大きいメッセージが含まれていました。

デバッグが役に立たない場合は、おそらくあなたが目にする動作を示す完全な小さなアプリを投稿することができます。

2
Gary Russell

Kafkaプロパティがサーバー上のファイルである場合、メッセージサイズを変更できます。

デフォルトのsever.propertyファイル

#/usr/local/kafka/config
#message.max.bytes=26214400

producer.properties->

# the maximum size of a request in bytes
# max.request.size=26214400

conusmerも同じ

1
Adesh

このような方法でプロデューサーの設定を設定する必要があります

Props.put(ConsumerConfig.FETCH_MAX_BYTES_CONFIG, "41943040");
0
YOGESH UKALE