【发布时间】:2020-11-22 01:39:49
【问题描述】:
我们正在使用带有 5 个代理的 Apache Kafka 2.2 版本。我们每天收到 5000 万个事件,但我们的 kafka cpu 使用率很高。我们正在使用默认的生产者/消费者/代理设置。
我对性能有一些疑问;
我们有不同的 kafka-streams 应用程序,它们进行聚合或连接操作以携带丰富的消息。我们所有的 kafka-streams 应用程序都包含以下设置:
- 恰好一次:真
- 最小同步副本数:3
- 复制因子:3
- 主题分区:~50-~100(拓扑不同)
当然也可能有拓扑的内部主题。我们正在将我们的工作机器扩展到至少 5 个应用程序。所以每个实例大部分时间都在为一个分区策略寻找一个线程。
但是,除了拓扑优化之外,我们可以在默认设置上做些什么吗?
除了 kafka-streams 应用程序之外,我们正在使用 spring-kafka 生产者/消费者。但就像我说的那样,我们使用的是默认设置。例如,我们在生产者端一一生产事件。
我们的吞吐量不够快,而且我们的 CPU 使用率很高。如果我们关闭我们的一些 kafka-streams 应用程序,代理负载正在减少。所以我的问题是;
exatly-once true 和复制因子为 3 的同步副本是否会对代理施加过多的负载?我不想在 prod 环境中丢失或删除我的消息,因此我的流应用程序必须由 exaclty-once true 组成,但是没有 kafka-streams 的 spring 应用程序也能很好地运行。
我想减少我们系统中代理的整体 CPU 使用负载。
如果我在生产者端使用批量生产者,减少我的容错工作人员的最小同步副本,我的 cpu 使用率会降低吗?
我想不出可选的方式。任何想法都会对我有所帮助,为什么我的经纪人 CPU 使用率非常高,例如 80-90 天左右。
什么会导致代理的 CPU 使用率过高?
【问题讨论】:
-
您的代理的实例类型是什么? Broker的核心数和内存数是多少?
标签: java apache-kafka apache-kafka-streams