KafkaConsumer分析

本文深入解析KafkaConsumer的重要字段和核心方法,包括subscribe动态订阅、assign手动分配分区、commitSync与commitAsync的同步异步提交、seek定位消费位置、poll获取消息、pause与resume暂停恢复消费,以及position获取消息偏移量。了解这些关键功能对于理解和使用KafkaConsumer至关重要。
摘要由CSDN通过智能技术生成

 

一 重要的字段 String clientId:Consumer唯一标识 ConsumerCoordinator coordinator: 控制Consumer与服务器端GroupCoordinator之间的通信逻辑 Fetcher<K, V> fetcher: 负责从服务器端获取消息的组件,并且更新partition的offset ConsumerNetworkClient client:  负责和服务器端通信 SubscriptionState subscriptions: 便于快速获取topic partition等状态,维护了消费者消费状态 Metadata metadata: 集群元数据信息 AtomicLong currentThread: 当前使用KafkaConsumer的线程id AtomicInteger refcount: 重入次数 二 核心的方法2.1 subscribe 订阅主题 订阅给定的主题列表,以获得动态分配的分区 主题的订阅不是增量的,这个列表将会代替当前的分配。注意,不可能将主题订阅与组管理与手动分区分配相结合 作为组管理的一部分,消费者将会跟踪属于某一个特殊组的消费者列表,如果满足在下列条件,将会触发再平衡操作:1 订阅的主题列表的那些分区数量的改变2 主题创建或者删除3 消费者组的成员挂了4 通过join api将一个新的消费者添加到一个存在的消费者组public void subscribe(Collection<String> topics, ConsumerRebalanceListener listener) {     // 取得一把锁    acquire();     try {         if (topics == null) { // 主题列表为null,抛出异常            throw new IllegalArgumentException("Topiccollection to subscribe to cannot be null");         } else if (topics.isEmpty()) {// 主题列表为空,取消订阅            this.unsubscribe();         } else {             for (String topic : topics) {                 if (topic == null || topic.trim().isEmpty())                     throw new IllegalArgumentException("Topic collection to subscribe to cannot contain null or emptytopic");             }             log.debug("Subscribed to topic(s):{}", Utils.join(topics, ", "));             this.subscriptions.subscribe(new HashSet<>(topics), listener);             // 用新提供的topic集合替换当前的topic集合,如果启用了主题过期,主题的过期时间将在下一次更新中重新设置。            metadata.setTopics(subscriptions.groupSubscription());         }     } finally {         // 释放锁        release();     } }2.2 assign 手动分配分区 对于用户手动指定topic的订阅模式,通过此方法可以分配分区列表给一个消费者:public void assign(Collection<TopicPartition> partitions) {     acquire();     try {         if (

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值