我们有2千5百万条记录涉及Kafka主题。
现在在负载测试期间要消耗和处理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。为了增加读取吞吐量,我们还需要考虑其他哪些方面?
答案 0 :(得分:0)
对于您的问题,我不会提供确切的答案,但会提供更多的路线图和方法论帮助。
如果一切正常,并且消费者的任务轻巧,那么100万条消息的10分钟确实很慢。
首先需要知道的是瓶颈。
可能是:
Kafka群集本身:消息很长时间都无法从群集中拉出。测试时,应检查一个简单的使用者(例如,Kafka CLI附带的使用者),该使用者直接在具有代理(或关闭)的计算机上运行,以避免网络延迟。那有多快?
经纪人和消费者之间的网络
消费者:它是做什么的?可能处理时间很长。然后优化应在此处运行。您可以监视消费者所需的资源(CPU,RAM)吗?也许可以做的一个很好的测试是创建一个测试使用者,在该使用者中将1万条消息加载到内存中,然后执行业务逻辑并为其计时。持续多长时间?这将告诉您您的消费者的最大吞吐量,而与Kafka的速度无关。