kafka长连接(golang)

kafka sarama提供producer及consumer相关客户端建立及使用,本文主要研究sarama如何保证客户端使用时的长连接。
一:客户端初始化
NewClient()函数用于完成客户端初始化,更新metadata数据,供consumer和producer使用。其中metadata包含topic下所有partition,主partition信息及主partition所在broker信息。
NewClient()函数主要完成以下工作:

  • 根据Config与addrs生成新的client结构体,结构体参数如下:

type client struct {
   
conf *Config
closer, closed chan none n 
seedBrokers []*Broker
deadSeeds []*Broker
 
controllerID int32 // cluster controller broker id
brokers map[int32]*Broker // maps broker ids to brokers
metadata map[string]map[int32]*PartitionMetadata // maps topics to partition ids to metadata
metadataTopics map[string]none // topics that need to collect metadata
}
  • 后台不停刷新kafka server集群的metadata信息,Metadata.RefreshFrequency默认为10分钟
  • 若broker集群处于leader选举期间连不上,默认重试3次,每次等待250ms
  • config中keepAlive字段,表示连接broker的保活间隔

二:cosumer客户端
consumer客户端主动探测kafka server信息以保证连接的有效性。
kafka 消费客户端源码解析(golang版)详细的介绍了consumer客户端如何消费kafka server中消息,其中ConsumerPartition函数中调用dispatch完成连接异常工作处理。
go dispatcher()函数,监听trigger,每次trigger代表一次消费连接异常,异常发生后,默认每2秒重连一次,直到重连成功

func (child *partitionConsumer) dispatcher() {
   
   for range child.trigger {
   
      select {
   
      case <-child.dying:
         close(child.trigger)
      case <-time.After
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值