V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
Darain
V2EX  ›  Go 编程语言

Golang 如何解耦多层级 kafka consumer 比较好?

  •  1
     
  •   Darain · 2020-07-20 20:42:26 +08:00 · 1734 次点击
    这是一个创建于 1592 天前的主题,其中的信息可能已经有所发展或是发生改变。

    简单描述一下当前的业务设计:

    1.主线程从 kafka 读消息 (message)

    2.把 message 根据 id 对 partition 取模转发给 dispatcher (dispatcher 数量 = partiton 大小)

    3.dispatcher 转发 message 给 concurrent handler (一个 dispatcher 对应多个 concurrent handler)

    4.concurrent handler 内有若干 message handler. 每个 concurrent handler 处理一类表(分表)的消息.

    5.message handler 内有一个 handler.

    6.handler 是实现了 Handle() 方法的实际业务处理者.(一条 message 被一个 handler 处理)

    dispatcher 的设计目的是为了维护 partition offset.

    concurrent message handler 的设计目的是简单的内部扩容,

    message handler 的设计目的是复用业务判断和错误处理, 让 handler 可以只写业务.

    目前的主要问题是, 我都是用 NewXX() 和 Run()方法, 在每一个 Run() 方法调用它的子 handler 的 Run(). 在 NewXX()方法里调用子 handler 的 NewXX() 方法.

    最后导致代码结构比较复杂, 而且很难理清. 不知道该怎么优化

    或者应该看些什么书 /文章比较好. 感觉思路是对的, 就是代码写的太绕了

    2 条回复    2020-07-21 09:36:27 +08:00
    madNeal
        1
    madNeal  
       2020-07-20 21:51:18 +08:00
    为啥不用现成的轮子

    https://github.com/segmentio/kafka-go
    superfat
        2
    superfat  
       2020-07-21 09:36:27 +08:00
    我最近也在用这个库做 consumer 相关开发
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   634 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 21:57 · PVG 05:57 · LAX 13:57 · JFK 16:57
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.