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