美文网首页kafka
Kafka-消费者概述

Kafka-消费者概述

作者: 我可能是个假开发 | 来源:发表于2023-01-28 23:37 被阅读0次

    一、消费方式

    1.pull( 拉)模式

    consumer采用从broker中主动拉取数据。

    Kafka采用这种方式。

    2.push(推)模式

    Kafka没有采用这种方式,因为由broker决定消息发送速率, 很难适应所有消费者的消费速率。 例如推送的速度是50m/s,Consumer1、 Consumer2就来不及处理消息。

    pull模式不足之处是, 如果Kafka没有数据, 消费者可能会陷入循环中, 一直返回空数据。


    image.png

    二、消费者组

    Consumer Group 是 Kafka 提供的可扩展且具有容错性的消费者机制。

    组内可以有多个消费者或消费者实例(Consumer Instance),它们共享一个公共的 ID,这个 ID 被称为 Group ID。
    组内的所有消费者协调在一起来消费订阅主题(Subscribed Topics)的所有分区(Partition)。每个分区只能由同一个消费者组内的一个 Consumer 实例来消费。

    Consumer Group三个特性:

    • Consumer Group 下可以有一个或多个 Consumer 实例。这里的实例可以是一个单独的进程,也可以是同一进程下的线程。在实际场景中,使用进程更为常见一些。
    • Group ID 是一个字符串,在一个 Kafka 集群中,它标识唯一的一个 Consumer Group。
    • Consumer Group 下所有实例订阅的主题的单个分区,只能分配给组内的某个 Consumer 实例消费。这个分区当然也可以被其他的 Group 消费。

    当 Consumer Group 订阅了多个主题后,组内的每个实例不要求一定要订阅主题的所有分区,它只会消费部分分区中的消息。

    Consumer Group 之间彼此独立,互不影响,它们能够订阅相同的一组主题而互不干涉。再加上 Broker 端的消息留存机制,Kafka 的 Consumer Group 完美地规避了上面提到的伸缩性差的问题。

    Kafka 仅仅使用 Consumer Group 这一种机制,却同时实现了传统消息引擎系统的两大模型:

    • 如果所有实例都属于同一个 Group,那么它实现的就是消息队列模型;
    • 如果所有实例分别属于不同的 Group,那么它实现的就是发布 / 订阅模型。

    理想情况下,Consumer 实例的数量应该等于该 Group 订阅主题的分区总数。

    消费者在消费的过程中需要记录自己消费了多少数据,即消费位置信息。在 Kafka 中,这个位置信息叫位移(Offset)。

    三、消费者重要参数

    参数名称 描述
    bootstrap.servers 向 Kafka 集群建立初始连接用到的 host/port 列表
    key.deserializer和value.deserializer 指定接收消息的 key 和 value 的反序列化类型。一定要写全类名。
    group.id 标记消费者所属的消费者组
    enable.auto.commit 默认值为 true,消费者会自动周期性地向服务器提交偏移量。
    auto.commit.interval.ms 如果设置了 enable.auto.commit 的值为 true, 则该值定义了消费者偏移量向 Kafka 提交的频率, 默认 5s
    auto.offset.reset 当 Kafka 中没有初始偏移量或当前偏移量在服务器中不存在(如,数据被删除了),该如何处理? earliest:自动重置偏移量到最早的偏移量。 latest: 默认, 自动重置偏移量为最新的偏移量。 none:如果消费组原来的( previous)偏移量不存在,则向消费者抛异常。 anything:向消费者抛异常
    offsets.topic.num.partitions _consumer_offsets 的分区数, 默认是 50 个分区
    heartbeat.interval.ms Kafka 消费者和 coordinator 之间的心跳时间, 默认 3s。该条目的值必须小于 session.timeout.ms ,也不应该高于session.timeout.ms 的 1/3
    session.timeout.ms Kafka 消费者和 coordinator 之间连接超时时间, 默认 45s。超过该值,该消费者被移除,消费者组执行再平衡。
    max.poll.interval.ms 消费者处理消息的最大时长, 默认是 5 分钟。超过该值,该消费者被移除,消费者组执行再平衡
    fetch.min.bytes 默认 1 个字节。消费者获取服务器端一批消息最小的字节数
    fetch.max.wait.ms 默认 500ms。如果没有从服务器端获取到一批数据的最小字节数。该时间到,仍然会返回数据
    fetch.max.bytes 默认 Default: 52428800( 50 m)。消费者获取服务器端一批消息最大的字节数。如果服务器端一批次的数据大于该值(50m)仍然可以拉取回来这批数据,因此,这不是一个绝对最大值。一批次的大小受message.max.bytes ( brokerconfig) or max.message.bytes (topic config) 影响。
    max.poll.records 一次 poll 拉取数据返回消息的最大条数, 默认是 500 条

    极客时间《Kafka 核心技术与实战》学习笔记Day14 - http://gk.link/a/11UOV

    相关文章

      网友评论

        本文标题:Kafka-消费者概述

        本文链接:https://www.haomeiwen.com/subject/wpquhdtx.html