一些Go操作Kafka的问题

1)包的选择

confluent-kafka-go使用了rdkafka的c库,破坏了go代码的收敛,不使用;

sarama不支持groud id 的功能,写consumer需要自己管理消费的partition,offset;很难用;

sarama-cluster是对sarama的一层封装,实现了group id 功能

 

2)关于offset问题

sarama-cluster有auto commit的功能,默认是一秒;但最好自己管理,如每100条数据MarkOffset,并CommitOffsets

 

3)实现consumer的Priority MQ功能

如1-5优先级的5个Topic,传入

map[string]int32 {

  topic1: 1,

  topic2: 2,

  ....

}

按Priority生成排序的consumerList,for循环遍历consume,<-consumer.Messages(),select之并设置default分支

 

4)producer

producer使用的AsyncProducer的对象池;测试:本机1K以上message大小,producer池可提升效率,原因是I/O时间长,单一Producer发送效率受限;小message(10byte),单个producer发送效率要高,瓶颈在producer池的频繁Get与Put

 

5)网络问题时,consumer会自动重连;

https://github.com/Shopify/sarama/issues/72

 

6)接收producer的Errors() chan一定要用for _, err := range producer.Errors();勿用for{}否则producer意外关闭,这里会死循环;

for {

  err := <-producer.Errors()  // 错误示例;若producer意外关掉,此外err一直返回nil,跑满CPU

  if err != nil {

    // print log

  }

}

转载于:https://www.cnblogs.com/gm-201705/p/7944362.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值