【问题标题】:Kafka Broker and Consumer optimizationKafka Broker 和 Consumer 优化
【发布时间】:2018-12-25 03:51:30
【问题描述】:

我们有 2500 万条记录写入 Kafka 主题。

  1. 主题有 24 个分区和 24 个消费者。
  2. 每条消息为 1KB。并且这些消息使用 Avro 进行封装,用于序列化和反序列化。
  3. 复制因子为 2。
  4. 提取大小为 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


    【解决方案1】:

    我不会为您提供问题的确切答案,而是提供路线图和方法帮助。

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

    首先你需要知道你的瓶颈是什么。

    可能是:

    • Kafka 集群本身:消息很长,需要从集群中拉出。 T 测试,您应该检查一个简单的消费者(例如随 Kafka CLI 提供的消费者),直接在您有代理(或关闭)的机器上运行,以避免网络延迟。这有多快?

    • 代理和消费者之间的网络

    • 消费者:它是做什么的?也许处理真的很长。然后优化应该在那里运行。您能否监控消费者所需的资源(CPU、RAM)?也许您可以做的一个很好的测试是创建一个测试使用者,在其中您将 10k 条消息加载到内存中,然后执行您的业务逻辑并对其计时。持续多久?这将告诉您消费者的最大吞吐量,无论 Kafka 的速度如何。

    【讨论】:

    • 您好,感谢您的建议。在收到每条消息后,我们需要执行一些业务逻辑。很抱歉没有早点添加这些细节。我已经用这些细节更新了问题。
    猜你喜欢
    • 2023-03-02
    • 1970-01-01
    • 2023-03-04
    • 2016-11-03
    • 2020-08-20
    • 2021-01-23
    • 2018-11-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多