次のエラーが発生しました(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
最初はエラーでしたが、これらの変更によって修正されましたが、この新しいエラーではまだ運がありません。
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プロパティを使用しています)、
リクエストには、サーバーが受け入れる最大メッセージサイズより大きいメッセージが含まれていました。
デバッグが役に立たない場合は、おそらくあなたが目にする動作を示す完全な小さなアプリを投稿することができます。
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も同じ
このような方法でプロデューサーの設定を設定する必要があります
Props.put(ConsumerConfig.FETCH_MAX_BYTES_CONFIG, "41943040");