卡夫卡经纪人和消费者优化

时间:2018-07-17 12:31:01

标签: apache-kafka

我们有2千5百万条记录涉及Kafka主题。

  1. 该主题有24个分区和24个使用者。
  2. 每个消息为1KB。这些消息用Avro包装,用于序列化和反序列化。
  3. 复制因子为2。
  4. 获取大小为50000,轮询间隔为50ms。

现在在负载测试期间要消耗和处理1百万,平均需要40分钟。但是,我们希望在不到20到30分钟的时间内处理2500万条记录。

经纪人配置:

background.threads = 10
num.network.threads = 7
num.io.threads = 8
Set replica.lag.time.max.ms  = 500
Set replica.lag.max.messages = 4
Set log.flush.interval.ms to default value as per logs
Used G1 collector instead of MarkSweepGC
Changed Xms to 4G and Xmx to 4G

我们的设置有8个代理,每个代理具有3个磁盘和带有单工网络的10GBPS以太网。

消费者配置:

我们正在使用Java Consumer API来使用消息。我们将swappiness设置为1,并使用200个线程来处理使用者中的数据。在消费者内部,我们正在获取消息并点击Redis,MaprDB以执行一些业务逻辑。逻辑完成后,我们将使用Kafka Commit Sync提交消息。

每个使用者都使用-xms 4G和-xmx 4G。为了增加读取吞吐量,我们还需要考虑其他哪些方面?

1 个答案:

答案 0 :(得分:0)

对于您的问题,我不会提供确切的答案,但会提供更多的路线图和方法论帮助。

如果一切正常,并且消费者的任务轻巧,那么100万条消息的10分钟确实很慢。

首先需要知道的是瓶颈。

可能是:

  • Kafka群集本身:消息很长时间都无法从群集中拉出。测试时,应检查一个简单的使用者(例如,Kafka CLI附带的使用者),该使用者直接在具有代理(或关闭)的计算机上运行,​​以避免网络延迟。那有多快?

  • 经纪人和消费者之间的网络

  • 消费者:它是做什么的?可能处理时间很长。然后优化应在此处运行。您可以监视消费者所需的资源(CPU,RAM)吗?也许可以做的一个很好的测试是创建一个测试使用者,在该使用者中将1万条消息加载到内存中,然后执行业务逻辑并为其计时。持续多长时间?这将告诉您您的消费者的最大吞吐量,而与Kafka的速度无关。