如何构建融合的卡夫卡消费者?

时间:2019-11-05 03:24:13

标签: go design-patterns apache-kafka confluent-kafka

我正在使用confluent-kafka-go来写kafka消费者

我有两个主题,topic1topic2。将来肯定会增加。


现在,遵循哪些良好的设计模式可以使我的代码保持整洁?

我实现的方式是:

var topicHandler map[string]func([]byte)

func init() {
    topicHandler = make(map[string]func([]byte))
    topicHandler["topic1"] = handleTopic1
    topicHandler["topic2"] = handleTopic2
    createConsumers(topicHandler)
}

func createConsumers(topicHandlers map[string]func([]byte)) error {

        // ...
        // start consumer for all the topics in topicHandlers map key 
        // ...

    // ***** consume from the topic
    for {
        select {
        case sig := <-sigchan:
            break
        default:
            ev := c.Poll(100)
            switch e := ev.(type) {
            case *kafka.Message:
                topicSpecificHanderFunc := topicHandlers[*e.TopicPartition.Topic]
                topicSpecificHanderFunc(e.Value)

            case kafka.Error:
                fmt.Fprintf(os.Stderr, "%% Error: %v: %v\n", e.Code(), e)
            }
        }
    }
    return nil
}

func handleTopic1(msg []byte) {
    fmt.Printf("%v", string(msg))
}

func handleTopic2(msg []byte) {
    fmt.Printf("%v", string(msg))
}

因此,将来,如果有人需要为topic3写消费者,他将做两件事...

  1. topicHandler["topic3"] = handleTopic3
  2. 创建func handleTopic3(msg []byte) {}函数来处理topic3的传入消息

    这是很好吗,或者您有什么建议可以改善吗?

    任何建议都非常欢迎。 谢谢

0 个答案:

没有答案