代码之家  ›  专栏  ›  技术社区  ›  el323

如何使用来自kafka主题的大消息

  •  1
  • el323  · 技术社区  · 6 年前
    Kafka Version 1.1.0
    

    我有一个单节点kafka代理,在config/server.properties中配置如下:

    代理配置:

    message.max.bytes=100000000
    max.message.bytes=100000000
    replica.fetch.max.bytes=150000000
    log.segment.bytes=1073741824 (Default)
    

    控制台使用者属性文件具有以下配置:

    消费者财产:

    receive.buffer.bytes=100000000
    max.partition.fetch.bytes=100000000
    fetch.max.bytes=52428800
    

    我正在生成一条大小约为20KB的消息。我使用console producer生成一个主题。然后在主题上启动一个控制台消费者,它不会使用完整的消息(中间插入)。

    我已经调查过了 this post 尝试设置相同的设置,但似乎没有成功。

    我错过了什么?请帮帮我。

    更新:

    > echo | xargs --show-limits
    
    Your environment variables take up 3891 bytes
    POSIX upper limit on argument length (this system): 2091213
    POSIX smallest allowable upper limit on argument length (all systems): 4096
    Maximum length of command we could actually use: 2087322
    Size of command buffer we are actually using: 131072
    Maximum parallelism (--max-procs must be no greater): 2147483647
    

    更新1:

    我已经测试了另一个场景。这次我使用java producer而不是console producer生成相同的消息,现在当我使用它时,我得到了完整的消息。

    1 回复  |  直到 6 年前
        1
  •  1
  •   NanoPish    6 年前

    可能是因为您正在使用控制台生产者并将消息复制到终端(Linux),而终端将长消息截断到最大固定长度。

    你可以试着用 echo | xargs --show-limits 或其他要查找的shell或术语设置。

    它也可以来自操作系统,例如ARG_MAX:

    getconf ARG_MAX
    

    对你的信息来说可能太小了。

    最简单的方法是直接将文件写入kafka控制台生产者,如下面的示例:

    kafka-console-producer.sh --broker-list localhost:9092 --topic my_topic
    --new-producer < my_file.txt
    

    如果它工作正常,就意味着这确实是个问题。


    为了记录,还应测试这些设置:

    • 消费者方面: fetch.message.max.bytes -这将确定消费者可以获取的消息的最大大小。
    • 经纪人方面: replica.fetch.max.bytes -这将允许代理中的副本在群集中发送消息,并确保正确复制消息。如果太小,则永远不会复制该消息,因此,使用者将永远看不到该消息,因为该消息永远不会提交(完全复制)。
    • 经纪人方面: message.max.bytes -这是代理可以从生产者接收的最大消息大小。
    • 代理端(每个主题): max.message.bytes -这是代理将允许附加到主题的最大消息大小。此大小经过预压缩验证。(默认为经纪人的 消息最大字节数 .)