使用Shopify/sarama消费kafka,修改topic的partition,触发rebanlance失败

现状

  1. 一台机器上多线程消费topic,差不多一个partition一个consumer
  2. 增加topic的partition触发了rebanlance,但并没有开始消费新的partition
  3. Shopify/sarama版本为1.13.1
  4. kafka版0.10.2

问题查找

  1. v1.24.1以下版本不会rebanlance
  2. 修复后理论上会rebanlance
  3. bsm/sarama-cluster不再更新,别使用

https://github.com/Shopify/sarama/pull/1525

原因

  1. 版本为0.10.2 <-不确定是否为该问题,但可以忽略
  2. kafka中的客户端ID相同,即每个线程的consumer使用默认ClientID,且IP地址相同

解决方法

  1. 配置ClientID且保证不同线程consumer不相同
  2. clusterCfg.ClientID = fmt.Sprintf("%s_%s", ConsumerId, uuid.New().String())
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以为您提供一些关于使用Sarama消费Kafka的基本步骤。首先,您需要安装Sarama和Kafka的Go客户端。您可以使用以下命令安装它们: ``` go get github.com/Shopify/sarama go get github.com/segmentio/kafka-go ``` 接下来,您需要使用以下代码来消费Kafka消息: ```go package main import ( "context" "fmt" "log" "os" "os/signal" "github.com/Shopify/sarama" ) func main() { // 设置 Kafka 消费者配置 config := sarama.NewConfig() config.Consumer.Return.Errors = true // 创建一个 Kafka 消费者 consumer, err := sarama.NewConsumer([]string{"localhost:9092"}, config) if err != nil { log.Fatal(err) } defer func() { if err := consumer.Close(); err != nil { log.Fatalln(err) } }() // 指定要消费TopicPartition topic := "my-topic" partition := int32(0) // 从指定的 offset 开始消费消息 offset := sarama.OffsetOldest pc, err := consumer.ConsumePartition(topic, partition, offset) if err != nil { log.Fatal(err) } defer func() { if err := pc.Close(); err != nil { log.Fatalln(err) } }() // 监听中断信号,优雅地退出程序 signals := make(chan os.Signal, 1) signal.Notify(signals, os.Interrupt) // 消费 Kafka 消息 for { select { case msg := <-pc.Messages(): fmt.Printf("收到消息: %s\n", string(msg.Value)) case err := <-pc.Errors(): fmt.Printf("消费错误: %s\n", err.Error()) case <-signals: fmt.Println("程序已退出") return } } } ``` 上面的代码中,我们使用Sarama创建了一个Kafka消费者,并指定要消费TopicPartition。然后,我们从指定的offset开始监听Kafka消息,收到消息后进行处理。同时,我们也监听了中断信号,以便在程序退出时能够优雅地关闭Kafka消费者。 希望这可以帮助您开始使用Sarama消费Kafka消息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值