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

时间:2018-07-26 12:03:16

标签: apache-kafka

Kafka Version 1.1.0

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

代理配置:

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的消息。我使用控制台生产者来制作主题。然后在该主题上启动控制台使用者,它不会消耗完整的消息(在两者之间切入)。

我研究了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生产者而不是控制台生产者来产生相同的消息,现在当我使用时,我得到了完整的消息。

1 个答案:

答案 0 :(得分:1)

可能是发生此问题的原因,因为您正在使用控制台生产者并将消息复制到终端(linux),但是终端将长消息截断为最大固定长度。

您可以尝试使用echo | xargs --show-limits或其他shell或术语设置进行查找。

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

getconf ARG_MAX

对于您的消息来说可能太小了。

最简单的方法是将文件直接写入kafka-console-producer,如下例所示:

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-这是代理将允许附加到主题的最大消息量。此大小在压缩前经过验证。 (默认为经纪人的message.max.bytes。)