sarama架构

Sarama是Go语言实现的Kafka客户端库。其架构包括client、producer和consumer。client负责元数据获取和broker通信;producer数据流包括asyncProducer、topicProducer、partitionProducer、aggregator和flusher,其中aggregator进行消息批量聚合;consumer则通过partitionConsumer、brokerConsumer进行消息处理。整个流程涉及goroutine、缓冲区管理和网络通信,确保高效的消息生产和消费。
摘要由CSDN通过智能技术生成

1.client

创建producer或consumer时,都会创建一个client与之关联,client负责获取metadata信息,并且client会启动一个backgroundMetadataUpdater,定期获取metadata。

client维护一个broker表,client在创建时,就连接到kafka broker,并启动broker的responseReceiver,用于接收kafka server返回的响应。

broker负责与kafka server的网络通信。

2. producer

  1. 数据流

    asyncProducer->topicProducer->partitionProducer->aggregator->flusher->broker

    asyncProducer:无缓冲

    topicProducer:有缓冲

    partitionProducer:有缓冲

    aggregator:无缓冲

    flusher:无缓冲

    broker:无channel,在flusher里发送。

  2. aggregator:对消息作批量聚集,一批消息最少有batch.num.messages,最多有queue.buffering.max.messages。

    flusher:每次把一批消息传递给brokerProduer。如果因为网络延时导致当前这批消息无法及时发送出去,那么就进一步导致aggregator正在做聚合的后一批消息数量堆积增多,直到达到queue.buffering.max.messages后,aggregator阻塞࿰

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值