常用Kafka命令实现

TopicCommand

  • writeTopicPartitionAssignment
  • /brokers/topics/[topic]/partitions/[0…N]

KafkaProducer

  • 初始化Metadata
  • 初始化RecordAccumulator
  • 创建Sender服务线程
  • Sender服务循环:
    • 获取准备发送数据的partition列表
    • drain出指定节点的所有数据并放入batch列表
    • 如需保证消息顺序,mute所有partition的数据
    • abortExpiredBatches
    • 发送ProduceRequest
    • 客户端poll指定连接:如果有分区的数据准备好了发送,timeout=0;如果有分区的数据积累但为准备好,timeout=[linger expiry time] - now;否则,timeout=[metadata expiry time]-now

KafkaConsumer

  • 初始化ConsumerCoordinator
  • 初始化Fetcher
  • consumer主循环:
    • pollOnce,第一轮Poll检查数据,如果启用了自动提交,会commit offset
    • 向分区leader发送fetch请求,fetch记录
    • 返回ConsumerRecord

ConsumerCoordinator

consumer group写在ZK的/consumers节点。

  • poll操作
    • ensureCoordinatorReady()确定coordinator存在。
    • 判断是否需要rejoin,如果需要rejoin:
      • 刷新元数据
      • 确定group是active状态:一致且加入了group。加入group:发送JoinGroupRequest,如成功先分配组,再发送SyncGroupRequest。
    • 向coordinator发送OffsetCommitRequest,执行自动的offset提交,异步执行。

Leader再平衡

验证指定topic的所有分区,移除失效分区,写入ZK的/admin/preferred_replica_election节点

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值