kafka是集群中间件,对于它的使用,是否说节点越多越好呢,TOPIC数量是否越多越好呢。
Kafka节点数
让我们回到kafka架构图
image.png
这是个三节点集群,为了提高可用性,那么是否节点增加越多越好呢?然后测试,发现:
- 单节点,吞吐量190M/s,CPU利用率2-2.5核
- 三节点,吞吐量60M/s,CPU利用率0.5-1.5核
- 五节点,吞吐量30M/s,CPU利用率0.2-1核
通过实验发现性能和节点数并发线性增长,会因为高可用损耗性能。损耗在哪里呢,节点数增多,副本分布的节点不同,或者分布在更多的节点上,会消耗更多的内存、CPU资源,从而导致性能下降。如果考虑可用和性能,根据实际项目,三节点可能是一个比较好的平衡点,而不是一味的增加节点。
Topic的数量
topic的数量会造成怎样的影响呢,在我们的实际项目中,应用根据需要自己定义topic,发现topic数量达到1000多个,而大多数topic实际消息量不多,可以用20%的topic占据了80%的消息量来形容。
但是由于topic泛滥,多个topic的副本间增加了大量的连接,并且为了消费,客户端连接到某个副本消费,增加了大量的不必要的消费连接。
大量的topic导致的结果就是节点资源消耗较多,需要扩充内存和CPU才能正常运行。
通过必要的topic治理,以及后续的topic申请规范,解决整个问题。
小结
kafka虽然是一把利器,但是在性能和高可用面前,是相互制约的。并且在使用kafka过程中,需要按照一定的规范对于topic进行约束,一段时间要进行治理。
网友评论