为什么添加更多消费者不会增加吞吐量?

时间:2018-03-21 19:42:28

标签: apache-kafka kafka-consumer-api kafka-producer-api kafka-python

我在具有56GB RAM和750GB磁盘的VM上安装了单个节点Kafka,其中包含一个代理。

这就是server.properties文件的样子:

broker.id=1
listeners=PLAINTEXT://hostname:port
num.network.threads=15
num.io.threads=30

socket.send.buffer.bytes=1024000
socket.receive.buffer.bytes=1024000
socket.request.max.bytes=1048576000

log.dirs=/path/to/log/

num.partitions=1
num.recovery.threads.per.data.dir=1

offsets.topic.replication.factor=1
transaction.state.log.replication.factor=1
transaction.state.log.min.isr=1

log.retention.hours=2160
log.retention.bytes=500000000000
log.segment.bytes=1073741824
log.retention.check.interval.ms=300000

zookeeper.connect=zkhostname:2181
zookeeper.connection.timeout.ms=6000

group.initial.rebalance.delay.ms=0
message.max.bytes=10485760

我有几个消费者和制作人正在处理各种主题,主题分区和消费者之间有1:1的对应关系(实际上我主要有1个分区和1个消费者)。我的每条消息的平均大小是500kb。

让我们说每个消费者(经过一些处理后生成另一个主题)的吞吐量大约是每秒200条记录。

对于特定主题,我有10个分区和10个消费者,希望处理速度提高10倍(并行消费和推送)。

吞吐量在每个消费者之间分配,可能类似于每个消费者每秒20条记录。我认为这可能发生的唯一原因是卡夫卡资源已经达到了一些限制?

在VM上,如果我执行free -m,结果是这样的:

               total        used        free      shared  buff/cache   available
Mem:          56339       12055       35087          24        9196       43428
Swap:             0           0           0

我读到Kafka在引擎盖下经常使用pagecache,所以如果这是正确的行为,我会感到困惑。

我尝试设置此

export KAFKA_HEAP_OPTS="-Xmx16G -Xms16G"
<{1>}中的

但似乎没有帮助。

如果是内存问题或其他资源耗尽问题,我该如何诊断Kafka?我错过了一些经纪人级别的配置吗?我需要了解我的Kafka服务器性能丢失的原因或方式。

1 个答案:

答案 0 :(得分:1)

在单个节点Kafka群集上,添加更多消费者不会增加吞吐量并不出人意料。

如果经纪人已经将其最大容量发送到1个客户端,如果您添加第二个客户端,则经纪人现在必须在两者之间共享其资源。

Kafka的优势在于您可以在群集中拥有多个代理,每个代理都可以成为某些分区的领导者。然后每个消费者将连接到几个不同的经纪人,这样每个消费者都可以使用每个经纪人的资源。

我故意不去谈论可能是你的瓶颈(CPU,网络等),但我只想解释为什么你的基础假设&#34;更多的消费者=更多的吞吐量&# 34;并不总是有效。

相关问题