Apache spark 将数据帧从Spark写入Kafka时出错(org.apache.Kafka.common.errors.RecordTooLargeException)
我正在使用下面的参数编写一个包含30000个条目的数据框架Apache spark 将数据帧从Spark写入Kafka时出错(org.apache.Kafka.common.errors.RecordTooLargeException),apache-spark,apache-kafka,Apache Spark,Apache Kafka,我正在使用下面的参数编写一个包含30000个条目的数据框架 .format("kafka") .option("kafka.bootstrap.servers", kafka_brokers) .option("kafka.compression.type","lz4") .option("kafka.max.request.size", 1048576)
.format("kafka")
.option("kafka.bootstrap.servers", kafka_brokers)
.option("kafka.compression.type","lz4")
.option("kafka.max.request.size", 1048576)
.option("kafka.message.max.bytes", 750000)
.option("kafka.max.request.size",750000)
.option("kafka.max.partition.fetch.bytes",750000)
.option("kafka.batch.size", 100)
.option("key.serializer", "org.apache.kafka.common.serialization.StringSerializer")
.option("value.serializer", "org.apache.kafka.common.serialization.JsonSerializer")
.option("topic", product_kafka_topic)
.option("partition",15)
我不知道Spark是如何划分数据帧的,我得到了错误
org.apache.kafka.common.errors.RecordTooLargeException: The message is 10540452 bytes when serialized which is larger than 750000, which is the value of the max.request.size configuration.
我怎样才能解决它
消息序列化时为10540452字节,大于750000
您已经明确限制了邮件大小
.option("kafka.message.max.bytes", 750000)
我不明白Spark是如何划分数据帧的
它接受您的键、值
列以及可选的时间戳
和分区
,然后将每一行打包成Kafka记录,这些记录以请求批的形式生成
.option("kafka.max.request.size", 1048576)
.option("kafka.max.request.size", 750000)
假设您使用第二个值重复了该选项,那么将在配置中使用该值
一个请求中可以有多条消息,但该值是字节,而不是记录数
.option("kafka.batch.size", 100)
这不是一个可以单独用Spark解决的问题;代理还将拒绝大型消息--请参阅此处的解决方案
旁白:结构化流媒体不使用
键.序列化程序
或值.序列化程序
或分区
作为配置选项您正在定义两倍于相同选项max.request.size。另外,这个错误消息很好地解释了这里的问题所在……它推送了10MB的数据块,我将限制保持在750KB。因此,deniedI无法更改kafka,这不在我的控制范围内。重新分区(2500,col(“pbpdID”)、col(“productName”)、col(“季节名称”)、col(“createdDate”))对数据进行了分区,但2%的数据仍然存在问题,我猜需要过滤当您将数据写入主题时,它只接受我列出的列,而不接受其他名称。