【发布时间】:2018-12-25 03:51:30
【问题描述】:
我们有 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 运行。为了提高读取吞吐量,我们还需要考虑哪些其他方面?
【问题讨论】:
标签: apache-kafka