第三章 消费者

本文介绍了Kafka消费者组的概念,包括协同器的角色、分区均衡和消费组 leader 的职责。详细讲解了创建消费组的过程,以及offset的管理和提交,包括current offset和committed offset的区别。此外,还讨论了手动提交和自动提交的优缺点,并提到了分区均衡监听器在处理分区重新分配时的作用。
摘要由CSDN通过智能技术生成

第三章 消费者

  • 消费者组
  • 协同器
  • 创建消费者
  • Offset管理
  • 分区均衡监听器
消费组

为什么需要消费者组?

为了提高应用性能,可以使用多个消费者,横向扩展系统的性能。

什么是消费者组?

多个消费者的 group_id 相同并且都订阅相同的 topic ,这些消费者都属于同一个消费者组。

消费者组和主题以及分区的关系?

一个主题有多个分区,一个分区只能属于相同消费者组里一个消费者。

如果我们有一个主题,并且主题有四个分区,此时我们仅有一个消费者在消费者组里,该消费者可以从四个分区读取数据。

如果我们的消费者组里有两个消费者,那每个消费者分别拥有两个分区。

如果我们的消费者组里有四个消费者,那么每个消费者都只有一个分区

这里有一个基本的概念:消费者组里消费者不能共享分区;还有一个限制:主题的分区必须大于消费组里的消费者的数量。如果消费组里的消费者的数量比主题的分区数量多,那么就会有额外的消费者没有分区,造成资源浪费。

协同器(group coordinator)

当新的消费者加入消费组或离开消费组,kafka怎么处理它们?分区会被赋给其他消费者?由谁来管理这些?

协同器

这些情况都是由协同器(group coordinator)来管理。kafka的一个broker会被选举出来作为协同器。当一个新的消费者要加入时,它会发送请求到协同器。第一个加入消费组的消费者会变成消费组leader。其他消费者属于消费者成员。协同器的职责是管理消费组,每次有消费者加入或离开,协同器就会修改消费者列表,并且触发分区平衡。

分区平衡:新的消费者你需要为它分配分区,或者当消费者离开时,该消费者的分区分配给其他的消费者。

消费组leader

消费组leader的职责是执行分区平衡。消费组leader会获取当前成员列表,分配分区给它们,然后把发送这些信息给协同器。协同器会和消费成员交流关于分区的信息。在分区平衡过程中,消费者不能读取消息。

创建消费组

创建消费者和创建生产者类似,只是有几个参数不一样。

  • group_id:用来表明消费者属于哪个组

订阅主题

消费者可以订阅一个或多个主题。如果我们想订阅多个主题时,可以使用正则表达式或通配符。

拉取消息

kafka给我们提供了非常直观的方法 poll() 来获取消息。poll() 方法它会帮助我们处理协同的工作、分区平衡、发送心跳等工作。当我们第一次调用 poll() 拉取消息时,消费者会去找协同器,并加入组,获取分区,最后拉取消息。每次调用 poll() 方法时,消费者将发送心跳到协同器,表明自己还没有down。如果消费者down,会触发分区平衡。

public class NewSupplierConsumer {
   

    public static void main(String[] args) throws Exception {
   

        String topicName = "SupplierTopic";
        String groupName = "SupplierTopicGroup";
        Properties props = new Properties();
        props.put("bootstrap.servers", "localhost:9092");
        props.put("group.id", groupName);
        props.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
        props.put("value.deserializer", "SupplierDeserializer");

        InputStream input = null;
        KafkaConsumer<String, Supplier> consumer = null;

        try {
   
            input = new FileInputStream("SupplierConsumer.properties");
            props.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值