Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 将数据帧从Spark写入Kafka时出错(org.apache.Kafka.common.errors.RecordTooLargeException)_Apache Spark_Apache Kafka - Fatal编程技术网

Apache spark 将数据帧从Spark写入Kafka时出错(org.apache.Kafka.common.errors.RecordTooLargeException)

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)

我正在使用下面的参数编写一个包含30000个条目的数据框架

    .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%的数据仍然存在问题,我猜需要过滤当您将数据写入主题时,它只接受我列出的列,而不接受其他名称。