8C 的机器,工作流消费很慢,因为工作流里都是网络请求,几十个工作流排队的情况下,CPU 利用率都只有 10% 都不到。
目前 kafka 默认 每个主题 10 个分区,分别对应 10 个消费线程。
请问目前是只能通过调整 kafka 的分区数量来增加消费线程吗?还有其他提高消费能力的方式吗?
因为只有 workflow-process 的主题排队特别多,是否可以只增加该主题分区数譬如到 50 个,同时消费线程配置增加到 50 个,其他主题的分区数保持默认 10 个?
8C 的机器,工作流消费很慢,因为工作流里都是网络请求,几十个工作流排队的情况下,CPU 利用率都只有 10% 都不到。
目前 kafka 默认 每个主题 10 个分区,分别对应 10 个消费线程。
请问目前是只能通过调整 kafka 的分区数量来增加消费线程吗?还有其他提高消费能力的方式吗?
因为只有 workflow-process 的主题排队特别多,是否可以只增加该主题分区数譬如到 50 个,同时消费线程配置增加到 50 个,其他主题的分区数保持默认 10 个?
好的谢谢!
谢谢回答!
这块调优我理解是根据业务特性来的,我是看着监控调的。我们的业务基本都集中在
workflow-button和workflow-process2 个主题中,但是我们业务特性是高网络 IO(延迟),几乎没有计算,所以我的调整方向是增加线程来提高 CPU 利用率,内存可以扩问题不大。我想确认下是否一定要按照文档里的 如何查看现有分区数、当前消息堆积情况以及如何自定义工作流消息队列的消费=线程=数,把所有主题的分区同时调高到譬如 20,还是说可以只调整其中个别分区?
默认情况,ENV_WORKFLOW_CONSUMER_THREADS=3,每个主题 10 分区情况下,kafka 的 CLIENT-ID 有 18 个消费线程。
当 ENV_WORKFLOW_CONSUMER_THREADS=20,且只调整
workflow-button和workflow-process的分区数到 20,其余主题不做变化,不重复的 CLIENTID,也就是消费线程来到了 86 个,这样会有隐患问题吗?单机不建议,因为
ENV_WORKFLOW_CONSUMER_THREADS是工作流相关消费端共用的,replicas默认都是 1,你调整了部分 Topic 的分区数,会导致不均衡;集群可以,因为集群可以调整不同消费服务的replicas的值,从而控制和ENV_WORKFLOW_CONSUMER_THREADS的乘积小于等于 Topic 分区数。kafka 分区数 >=
replicas(单机默认为 1)*ENV_WORKFLOW_CONSUMER_THREADS最好是等于;另外关于资源情况,就是调整分区数和ENV_WORKFLOW_CONSUMER_THREADS以及replicas,需要伴随着监控观察来确认还能调整多少或者增加多少。CPU 和内存,一般单机 8C32G 要求,8C(其实就是线程数;但是颗数也不要低于 4,判断方式:cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l),8C 一般情况下是吃不过 50% 的,比较极端情况可能会过 50% 甚至吃满(比如:慢查询等);内存是比较吃的,这个是直观受 MongoDB 和消费分区数、
replicas和ENV_WORKFLOW_CONSUMER_THREADS影响的,一些服务本身也是相对吃内存的(比如。Net)。内存,CPU 占用率基本很少会超过 50%,主要是内存感觉
我把 2 个分区(
WorkFlow-Process,WorkFlow-Button)调到 20 了,其他分区没动,ENV_WORKFLOW_CONSUMER_THREADS也调到了 20,现在 CPU 利用率上来了。按道理分区数和线程数得匹配,但是 kafka 我记得如果线程挂在不存在的分区,顶多也就拿个空消息,现在结果看来也运行正常。
不过这种调整方式最好官方还是确认下心里踏实点。
你说的“差点崩了”是因为内存还是 CPU?
感觉对内存要求比较高,CPU 一般都能满足,CPU 利用率一直都不高,改过一次,服务器差点崩了。10 到 20
改完后我自己几个人测试完全没问题,前端流程一多起来或者用的人一多起来,直接报错 504、502 各种报错。
现在暂时不敢改了,有点小慌
关于两个系统参数的建议设置值 | HAP 社区
调是能调,但具体多少量根本不清楚,配置肯定是往大了开的,具体服务器承受的了多少,根本不清楚,看着是“才”十几条数据 👀️