Scala 在kafka中处理大型Xml文件

Scala 在kafka中处理大型Xml文件,scala,apache-kafka,kafka-producer-api,alpakka,Scala,Apache Kafka,Kafka Producer Api,Alpakka,我正在使用带有scala应用程序的Alpakka kafka。我的卡夫卡正在docker内部运行,我正试图使用我的代码在卡夫卡制作人上发布消息。我的代码如下 def sendMsg(xmlFile: String): Future[Done] = { futureToFutureTry { val producer = SendProducer(producerSettings) producer.send(new ProducerRecord("to

我正在使用带有scala应用程序的Alpakka kafka。我的卡夫卡正在docker内部运行,我正试图使用我的代码在卡夫卡制作人上发布消息。我的代码如下

 def sendMsg(xmlFile: String): Future[Done] = {
    futureToFutureTry {
      val producer = SendProducer(producerSettings)
      producer.send(new ProducerRecord("topic_name", "Key", xmlFile)).map(result => {
        producer.close()
      })
    } flatMap {
      case Success(v) => v
      case Failure(e) =>
        Future.failed(e)
    }
  }
代码没有问题,但当我发送大xml文件时,它会给我一个错误,即org.apache.kafka.common.errors.RecordTooLargeException:消息序列化时为22093081字节,大于您使用max.request.size配置配置的最大请求大小。


我可以看到stackoverflow本身的一些解决方案,但没有一个解释我需要在哪里进行更改。如何增加最大请求大小。我是卡夫卡的新手。当应用程序启动时,我可以看到它正在打印默认的max.request.size,但不知道它是如何打印的,我需要如何、在哪里以及如何解决它。请提供帮助

如果您计划向卡夫卡发送大于默认大小1048588字节的消息,则需要更改三个不同位置的设置:

  • 主题配置
  • 生产者配置
  • 消费者配置
  • 主题配置 创建主题时,需要确保将
    max.message.bytes
    设置为更大的值。创建卡夫卡主题时,可以使用
    Kafka主题
    脚本设置此配置:

    bin/kafka-topics.sh--引导服务器localhost:9092--创建--主题名称--分区1--复制因子1--配置max.message.bytes=50000000
    
    此配置的说明如下所示:

    Kafka允许的最大记录批量大小(如果启用了压缩,则在压缩后)。如果此值增加,并且存在早于0.10.2的使用者,则使用者的获取大小也必须增加,以便使用者能够获取如此大的记录批次。在最新的消息格式版本中,为提高效率,记录始终分组为批。在以前的消息格式版本中,未压缩的记录不会分组到批中,在这种情况下,此限制仅适用于单个记录

    生产者配置 在变量
    producerSettings
    中,需要增加
    max.request.size
    的值,例如:

    val producerSettingsNew=producerSettings+(“最大请求大小”->“50000000”)
    
    此设置的说明如下所示:

    请求的最大大小(字节)。此设置将限制制作者在单个请求中发送的记录批数,以避免发送大量请求。这实际上也是最大未压缩记录批量大小的上限。请注意,服务器对记录批量大小有自己的上限(如果启用了压缩,则在压缩之后),这可能与此不同

    消费者配置 此外,还需要通过增加
    max.partition.fetch.bytes
    在设置中配置您的使用者

    描述如下:

    服务器将返回的每个分区的最大数据量。记录由使用者分批获取。如果获取的第一个非空分区中的第一个记录批大于此限制,则仍将返回该批,以确保使用者能够取得进展。代理接受的最大记录批量大小是通过message.max.bytes(代理配置)或max.message.bytes(主题配置)定义的。有关限制使用者请求大小的信息,请参阅fetch.max.bytes


    如果您计划向Kafka发送大于默认大小1048588字节的消息,则需要更改三个不同位置的设置:

  • 主题配置
  • 生产者配置
  • 消费者配置
  • 主题配置 创建主题时,需要确保将
    max.message.bytes
    设置为更大的值。创建卡夫卡主题时,可以使用
    Kafka主题
    脚本设置此配置:

    bin/kafka-topics.sh--引导服务器localhost:9092--创建--主题名称--分区1--复制因子1--配置max.message.bytes=50000000
    
    此配置的说明如下所示:

    Kafka允许的最大记录批量大小(如果启用了压缩,则在压缩后)。如果此值增加,并且存在早于0.10.2的使用者,则使用者的获取大小也必须增加,以便使用者能够获取如此大的记录批次。在最新的消息格式版本中,为提高效率,记录始终分组为批。在以前的消息格式版本中,未压缩的记录不会分组到批中,在这种情况下,此限制仅适用于单个记录

    生产者配置 在变量
    producerSettings
    中,需要增加
    max.request.size
    的值,例如:

    val producerSettingsNew=producerSettings+(“最大请求大小”->“50000000”)
    
    此设置的说明如下所示:

    请求的最大大小(字节)。此设置将限制制作者在单个请求中发送的记录批数,以避免发送大量请求。这实际上也是最大未压缩记录批量大小的上限。请注意,服务器对记录批量大小有自己的上限(如果启用了压缩,则在压缩之后),这可能与此不同

    消费者配置 此外,还需要通过增加
    max.partition.fetch.bytes
    在设置中配置您的使用者

    描述如下:

    服务器将返回的每个分区的最大数据量。记录由使用者分批获取。如果获取的第一个非空分区中的第一个记录批大于此限制,则仍将返回该批,以确保使用者能够取得进展。代理接受的最大记录批量大小是通过message.max.bytes(代理配置)或max.message.b定义的