kafka 系列 -- 4.1、消费者基本介绍

本文详细介绍了Kafka消费者的使用,包括消费者以组为单位的消费模型、分区分配与重分配策略、订阅主题与消息消费、位移提交、消费组的分区再均衡以及消费者拦截器。强调了Kafka消费者的重要参数和与RocketMQ的异同,指出Kafka消费者线程不安全,但提供了多线程消费的能力,并能确保消息不丢失。
摘要由CSDN通过智能技术生成

1、消费者食用DEMO

Properties prop = new Properties();
prop.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class.getName());
prop.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class.getName());
prop.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, "kafka:9092");
prop.put(ConsumerConfig.GROUP_ID_CONFIG, "testConsumer");
prop.put(ConsumerConfig.CLIENT_ID_CONFIG, "consumerDemo");
KafkaConsumer<String, String> consumer = new KafkaConsumer<>(prop);
consumer.subscribe(Collections.singleton("test"));
while (true) {
   
    ConsumerRecords<String, String> records = consumer.poll(Duration.ofMillis(1000));
    for (ConsumerRecord<String, String> record : records) {
   
        String key = record.key();
        String value = record.value();
        System.err.println(record.toString());
    }
}

2、消费者基本概念

kafka 消费者是以 组为基本单位 进行消费的。消费的模型如下
在这里插入图片描述

1 个 topic 允许被多个 消费组 消费。再次强调,kafka 消费是以组为单位。

prop.put(ConsumerConfig.GROUP_ID_CONFIG, "testConsumer");

以上这行代码设置了消费组。

2.1、partition 分配

topic 为逻辑上的概念,partition 才是物理上的概念。那么看完这个以上的消费模型图。你可能会很疑惑。当一个组下有多个消费者时,每个消费者是如何消费的?

先说明:partition 的分配为平均分配

假设一:topic1 下面有 3 个分区。分别如下:p1 - p3。那么 groupA 下的三个消费者消费的对应 partition 为如下

instance1: p1
instance2: p2
instance3: p3

假设二:topic1 下面有 8 个分区。分别为 p1 - p8。那么 groupA 中每个消费者分配到的 partition 就如下

instance1: p1,p2,p3
instance2: p4,p5,p6
instance3: p7,p8
2.2、partition 重分配

假设三:topic1 下面有 8 个分区:P1 - P8。groupA 有三个消费者:c1,c2,c3。此时分配的 partition 如下

c1: p1,p2,p3
c2: p4,p5,p6
c3: p7,p8

如果此时,又有一个新的消费者加入到 groupA 会发生什么呢? partition 会被重新分配

c1: p1,p2
c2: p3,p4
c3: p5,p6
c4: p7,p8

3、消费者端 API 介绍

3.1、订阅主题
void subscribe(Collection<String> topics);
void subscribe(Collection<String> topics, ConsumerRebalanceListener callback)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值