Kafka(四)【Kafka 消费者】(1)

简介: Kafka(四)【Kafka 消费者】

前言

       截止昨天 Flink 第一遍是过了,当然得深入复习,把相关的书都看一遍。那么今天开始就得同样抓紧把 Kafka 、Flume 过完第一遍,完了看看相关的书。最后用这些先做一个小的项目。至于剩下的时间,就是每天离线数仓、实时数仓的学了,必须掌握到 70~90%。虽然不知道结果怎么样,但是无路可退了,那就肝到底吧。

       此外还有 SSM、SpringBoot 也是需要掌握的,好在兴趣使然,没有多大压力。

Kafka 消费者

1、消费方式

       Kafka 消费者使用 pull 的方式从 broker 主动拉取数据,而不是让 broker 去主动把数据 push(推/主动发送)给消费者,因为毕竟每个消费者的速度是不同的,最好还是根据消费者自己的性能来获取数据。

2、消费者工作流程

2.1、消费者总体工作流程

  • 每个消费者可以消费多个分区,但是一个分区的数据只能被一个消费者组里的一个消费者消费。

如果消费者在消费完某个数据之后挂掉了,有后续新的消费者代替它,那么新的小肥猪怎么继续消费?

其实,在消费者读取数据的 offset 是会被保存在 Kafka broker 系统主题中的,也就是说,即使消费者挂了,下一个消费者可以从 broker  的系统主题里获得上次消费的 offset ,然后接着继续消费。(旧版本 offset 是存储在 zookeeper 中的,但是当消费者非常多的时候可能会造成大量的网络交互;)

2.2、消费者组原理

2.2.1、消费者组

consumer group:消费者组,由多个 consumer 组成。形成一个消费者组的条件是所有消费者的 groupid 相同。

  • 消费者组内每个消费者负责消费不同分区的数据,一个分区只能由一个组内的一个消费者消费(防止数据被重复消费)。
  • 消费者组之间互不影响。所有消费者都属于某个消费者,即消费者组是逻辑上的一个订阅者。
  • 如果消费者组的组员数量 > 分区数量,则就会有多余的消费者闲置。
2.2.2、消费者组初始化流程

  • coordinator:辅助实现消费者组的初始化和分区的分配。coordinator 节点选择 = groupid.hashcode()%50 (goupid 是我们自己写代码的时候指定的,50 是 _consumer_offsets 的分区数量默认是 50)

选定 coordinator 后:

  1. 消费者组内的每个消费者都会向 coordinator 发送一个 JoinGroup 请求(请求加入到 groupid 这个组)
  2. coordinator 会从发来请求的所有消费者中随机选择一个作为消费者组中的 leader。
  3. coordinator 会把自己从这些消费者中收集到的请求中的信息都发送给这个 leader,也就是说,coordinator 只是辅助消费者组的分区选择,真正的分区分配是由 leader 完成的。
  4. leader 会定制一个消费方案。
  5. 制定好消费方案后,leader 会把制定好的计划发送给 coordinator。
  6. coordinator 然后把消费方案下发给每个消费者。
  7. 每个消费者都会和 coordinator 保持心跳(默认 3s),一旦超时(45s)该消费者就会被移除,并触发再平衡;或者消费者处理时间太长(5分钟)也会触发再平衡

消费者消费数据的条件:

  • fetch.min.bytes 每批次最小抓取字节数:只要达到该字节数就进行返回
  • fetch.max.wait.ms 一批数据最小值未到达的超时时间 :即使没有达到最小字节数,当等待时间达到该值时也会进行返回
  • fetch.max.bytes 每批次最大抓取字节数

消费者消费的参数:

  • max.poll.records 每次拉取的最大消息数,默认 500 条

此外,消费者可以和生产者一样在拦截器这里对数据进行处理。

2.3、消费者重要参数

参数名称

描述

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: 5242880050 m)。消费者获取服务器端一批消息最大的字节数。如果服务器端一批次的数据大于该值(50m)仍然可以拉取回来这批数据,因此,这不是一个绝对最大值。一批次的大小受message.max.bytes (broker config)or max.message.bytes (topic config)影响。

max.poll.records

一次poll拉取数据返回消息的最大条数,默认是500条。

Kafka(四)【Kafka 消费者】(2)https://developer.aliyun.com/article/1532345

相关文章
|
13天前
|
消息中间件 存储 负载均衡
Apache Kafka核心概念解析:生产者、消费者与Broker
【10月更文挑战第24天】在数字化转型的大潮中,数据的实时处理能力成为了企业竞争力的重要组成部分。Apache Kafka 作为一款高性能的消息队列系统,在这一领域占据了重要地位。通过使用 Kafka,企业可以构建出高效的数据管道,实现数据的快速传输和处理。今天,我将从个人的角度出发,深入解析 Kafka 的三大核心组件——生产者、消费者与 Broker,希望能够帮助大家建立起对 Kafka 内部机制的基本理解。
44 2
|
3月前
|
消息中间件 负载均衡 大数据
揭秘Kafka背后的秘密!再均衡如何上演一场消费者组的‘权力游戏’,让消息处理秒变高能剧情?
【8月更文挑战第24天】Kafka是一款在大数据处理领域备受推崇的产品,以其出色的性能和可扩展性著称。本文通过一个具体案例介绍其核心机制之一——再均衡(Rebalancing)。案例中,“user_activity”主题下10个分区被3个消费者均衡消费。当新消费者加入或原有消费者离开时,Kafka将自动触发再均衡过程,确保所有消费者能有效处理分配给它们的分区。
134 62
|
3月前
|
消息中间件 Kafka API
【Kafka消费新风潮】告别复杂,迎接简洁之美——深度解析Kafka新旧消费者API大比拼!
【8月更文挑战第24天】Apache Kafka作为一个领先的分布式流处理平台,广泛用于实时数据管道和流式应用的构建。随着其发展,消费者API经历了重大更新。旧消费者API(包括“低级”和“高级”API)虽提供灵活性但在消息顺序处理上存在挑战。2017年引入的新消费者API简化了接口,自动管理偏移量,支持更强大的消费组功能,显著降低了开发复杂度。通过对比新旧消费者API的代码示例可以看出,新API极大提高了开发效率和系统可维护性。
129 58
|
1月前
|
消息中间件 SQL 分布式计算
大数据-76 Kafka 高级特性 稳定性-消费重复 生产者、Broker、消费者 导致的重复消费问题
大数据-76 Kafka 高级特性 稳定性-消费重复 生产者、Broker、消费者 导致的重复消费问题
32 1
|
5月前
|
消息中间件 分布式计算 Kafka
Kafka(四)【Kafka 消费者】(4)
Kafka(四)【Kafka 消费者】
|
3月前
|
消息中间件 负载均衡 Kafka
【Kafka消费秘籍】深入了解消费者组与独立模式,掌握消息消费的两种超能力!
【8月更文挑战第24天】Apache Kafka是一款高性能的分布式消息系统,支持灵活多样的消费模型以适应不同的应用场景。消息按主题组织,每个主题可划分为多个分区,确保消息顺序性。本文深入探讨了Kafka中的两大核心消费模式:消费者组(Consumer Group)和独立消费者(Standalone Consumer)。消费者组允许多个消费者协同工作,实现负载均衡及故障恢复,是最常用的消费模式。独立消费者模式则适用于需要高度定制化处理逻辑的场景,如消息重放等。通过对比这两种模式的特点和提供的示例代码,开发者可以根据具体需求选择最合适的消费策略,从而更好地利用Kafka构建高效的数据流应用程序。
78 3
|
3月前
|
图形学 C# 开发者
全面掌握Unity游戏开发核心技术:C#脚本编程从入门到精通——详解生命周期方法、事件处理与面向对象设计,助你打造高效稳定的互动娱乐体验
【8月更文挑战第31天】Unity 是一款强大的游戏开发平台,支持多种编程语言,其中 C# 最为常用。本文介绍 C# 在 Unity 中的应用,涵盖脚本生命周期、常用函数、事件处理及面向对象编程等核心概念。通过具体示例,展示如何编写有效的 C# 脚本,包括 Start、Update 和 LateUpdate 等生命周期方法,以及碰撞检测和类继承等高级技巧,帮助开发者掌握 Unity 脚本编程基础,提升游戏开发效率。
75 0
|
4月前
|
消息中间件 存储 负载均衡
深入理解Kafka核心设计及原理(三):消费者
深入理解Kafka核心设计及原理(三):消费者
89 8
|
4月前
|
消息中间件 存储 Kafka
面试题Kafka问题之Kafka的消费者(Consumer)跟踪消息如何解决
面试题Kafka问题之Kafka的消费者(Consumer)跟踪消息如何解决
57 0
|
4月前
|
消息中间件 存储 资源调度
实时计算 Flink版产品使用问题之在消费Kafka的Avro消息,如何配置FlinkKafka消费者的相关参数
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
下一篇
无影云桌面