V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Fu4ng
V2EX  ›  程序员

多实例下提升单分区单消费组速度

  •  
  •   Fu4ng · 2021-07-14 19:50:43 +08:00 · 1152 次点击
    这是一个创建于 988 天前的主题,其中的信息可能已经有所发展或是发生改变。
    背景
    外部团队给了一个 topic,这个 topic 只有一个分区,因为消息之间有强顺序关系。

    问题
    目前我们团队发现这个 topic 的消费速度有点慢,想优化下。

    我自己想到了两种解决办法,感觉这两种方式都不太好。

    解法 1
    基于多单消费者的基础上,自己写个线程池,并发处理消息。
    这个方法的缺点是只能有一个实例在消费消息(单消费者),无法扩展。

    解法 2
    引入 kafka, 把消息做一层转发,可以根据自己的业务逻辑做分区。
    缺点是引入了一个中间件。


    欢迎大佬们讨论
    8 条回复    2021-07-15 10:20:14 +08:00
    Fu4ng
        1
    Fu4ng  
    OP
       2021-07-14 20:46:32 +08:00 via Android
    感觉第二个办法会好点?
    jimmyismagic
        2
    jimmyismagic  
       2021-07-14 20:49:37 +08:00
    你这个题目得讲清楚,topic 是个啥,听样子也是个 kafka
    消费慢,得看是读取慢,还是处理慢
    Fu4ng
        3
    Fu4ng  
    OP
       2021-07-14 20:56:33 +08:00
    @jimmyismagic
    是的 也是一个 kafka
    Fu4ng
        4
    Fu4ng  
    OP
       2021-07-14 20:56:47 +08:00
    @jimmyismagic 是处理慢
    jimmyismagic
        5
    jimmyismagic  
       2021-07-14 21:01:36 +08:00
    @Fu4ng 扩展了就能处理快吗?得看你需要扩展几个线程,如果你要扩展到几百个分区才能处理,就扩展,否则就是 1
    同时需要看一下处理是 cpu 密集型还是 io 密集型
    Fu4ng
        6
    Fu4ng  
    OP
       2021-07-14 21:07:05 +08:00 via Android
    @jimmyismagic 十分感谢。很专业的解答
    billlee
        7
    billlee  
       2021-07-14 21:21:50 +08:00
    我选 1, 既然写入时是一个分区,那么单线程读取也肯定没有问题。读出来再分发到处理线程就可以了。

    单机就搞个线程池,集群就搞个 flink.
    echoZero
        8
    echoZero  
       2021-07-15 10:20:14 +08:00
    消息间的强顺序关系,不是所有消息都有强顺序吧,应该可以按照指定的方式来划分不同的分区吧。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3557 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 751ms · UTC 04:54 · PVG 12:54 · LAX 21:54 · JFK 00:54
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.