apache-kafka - Kafka Broker 和 Consumer 优化
问题描述
我们有 2500 万条记录写入 Kafka 主题。
- 该主题有 24 个分区和 24 个消费者。
- 每条消息为 1KB。并且这些消息用 Avro 包装起来进行序列化和反序列化。
- 复制因子为 2。
- 获取大小为 50000,轮询间隔为 50 毫秒。
目前在负载测试期间消耗和处理 100 万,平均需要 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 运行。为了提高读取吞吐量,我们还需要考虑哪些其他方面?
解决方案
我不会为您提供问题的确切答案,而是提供路线图和方法帮助。
如果一切正常并且消费者的任务很轻,100 万条消息的 10 分钟确实很慢。
你需要知道的第一件事是你的瓶颈是什么。
它可能是:
Kafka 集群本身:消息很长时间要从集群中拉出。T 测试,您应该检查一个简单的消费者(例如随 Kafka CLI 提供的消费者),直接在您有代理(或关闭)的机器上运行,以避免网络延迟。那有多快?
经纪人和消费者之间的网络
消费者:它是做什么的?也许处理真的很长。然后优化应该在那里运行。您能否监控消费者所需的资源(CPU、RAM)?也许您可以做的一个很好的测试是创建一个测试使用者,在其中您在内存中加载 10k 条消息,然后执行您的业务逻辑并对其计时。持续多久?这将告诉您消费者的最大吞吐量,而与 Kafka 的速度无关。
推荐阅读
- python - 按钮存在并显示单击了 Selenium python
- visual-studio-code - subprocess.Popen 将打开记事本然后立即关闭它与代码
- python - 是否有根据上面行中的日期在熊猫中估算日期的功能?
- c# - Acumatica - 将合并报告添加到电子邮件附件
- autodesk-forge - 使用 SVF2 时,await AggregateView.waitForLoadDone() 有时会无限期阻塞
- python - 只有一个 if 语句突然不起作用。请看一下
- python - 授予将文件保存在另一个文件夹中的权限后权限被拒绝
- java - 当使用大量数字时,查找二次根的代码会失败
- python - Scrapy 下载 HTML 模板而不是页面源
- javascript - 如果我单独使用这个项目,我可以在项目中直接依赖,但是当我将我的项目用作另一个项目时,同一个部门的行为就像对等一样