emqx4.4.16,kafka插件开启,cpu飙升,用的brod

EMQX 版本

EMQX 安装部署方式

EMQX 集群情况

服务器(运行 EMQX 的机器)硬件配置

4c8G

服务器操作系统和平台

linux,centos7

服务端参数优化情况

默认

压力机硬件配置

8c32g

压力机使用的测试工具

jmeter

压力机参数优化情况

在 EMQX 中启用的功能

测试场景

emq 部署在4c8g机器上,不开启emq的kafka插件,qps 轻松到好几千,开始插件后,qps最多只能到300,同时机器的cpu接近80%,qps上不去了。

具体问题

为什么cpu会这么高?

代码样例

attch进去,按cpu排序

你attach后用 observer_cli:start(). 看一下。
后台的日志有什么异常的么

你可以用这个Wolff,不需要裸用brod,而且我注意到你用的是sync模式。
你也可以再试试async的异步模式。

-export([handle_ack/3]).

send(...) ->
  wolff:send(Producers, Messages, {fun ?MODULE/handle_ack, [self()]}).

handle_ack(Partition, Offset, Caller) ->
  Caller ! {kafka_acked, Partition, Offset},
  ok. % must return ok

我的mqtt报文比较大,有20k到120k不等,平均80k左右,这个会是导致cpu高的主要原因吗

异步我试过了,效果甚微,qps能高一点点,我看看你说的wolf

从你的图上看都卡在了brod_producer:sync_produce_request 上了。
如果是CPU太高了,估计就是到了瓶颈了。
如果只是QPS上不去,还可以加pool 优化下。。

你是不是把kafaka装在一台机器上了。我看emqx进程的CPU才191%,你说的4c8G(满了CPU得400%)啊

不在一台机器上

你ps -ocpu 23129 看看

[kkk log]$ ps -ocpu 23129
CPU

image

加pool能细说一下吗,是对什么加pool

wolff给的例子是没发一条消息都创建一个producer,producer 可以公用吗,感觉每次创建一个,影响性能。

当然可以啊。你得自己搞个pool,自己研究呗