消费者和消费群组:

  Kafka消费者从属于消费者群组,一个群组里的消费者订阅的是同一个主题,每个消费者接收主题的一部分分区消息

  消费者的数量不要超过主题分区的数量,多余的消费者只会被闲置

  一个主题可以被多个消费群组使用,消费者群组之间互不影响

  

  当一个消费者加入群组时,他读取的数据是原本由其他消费者读取的信息

  分区的所有权从一个消费者转移至另一个消费者的行为称为“再均衡”

  再均衡期间,消费者当前的读取状态会丢失,消费者无法读取信息,造成集群一小段时间的不可用,在恢复状态之前会拖慢应用程序

  消费者通过向群组协调器broker发送心跳维持他们和群组的从属关系以及他们对分区的所有权关系,如果broker认为消费者死亡会触发再均衡行为

 分配分区过程:

  当消费者加入群组时,他会向群组协调器发送一个JoinGroup请求,第一个加入群组的消费者称为群主,群主从协调器那里获得群组的成员列表,并负责给每一个消费者分配分区。他使用一个实现PartitionAssignor接口的类来决定哪些分区应该被分配给消费者,分配完毕之后,群主把分配情况列表发送给broker,broker再把这些信息发送给所有消费者,每个消费者只能看到自己的分配信息,只有群主知道群组的所有消费者的分配信息

  消息轮询是消费者API核心,通过从一个简单的轮询向服务器请求数据,一旦消费者订阅了主题,轮询就会处理所有细节,包括群组协调/分区再均衡/发送心跳/获取数据

  一个消费者使用一个线程

  

消费者重要的属性参数配置:

  fetch.min.bytes

    指定了消费者从服务器获取记录的最小字节数,如果broker收到消费者请求,但数据可用量小于fetch.min.bytes,就会等到有足够的可用数据才把它返回给消费者

  fetch.max.wait.ms

    指定broker等待时间,默认500ms

  max.partition.fetch.bytes

    指定服务器从每个分区里返回给消费者的最大字节数,默认1MB    max.partition.fetch.size的值必须比broker能接收的最大消息字节数(max.message.size)大

  session.timeout.ms

    指定消费者在被认为死亡之前可以与服务器断开连接的时间,默认3S

    heartbeat.interval.ms =  session.timeout.ms / 3

  auto.offset.reset

    指定消费者在读取一个没有偏移量的分区或者偏移量无效的情况下该如何处理

    =latest  消费者从最新的记录开始读取数据

    =earliest  消费者从起始位置读取分区记录

  enable.auto.commit

    指定消费者是否自动提交偏移量,默认true

      auto.commit.interval.ms 控制提交频率

  partition.assignment.strategy

    =org.apache.kafka.clients.consumer.RangeAssignor 把主题的若干连续分区分配给消费者

    =org.apache.kafka.clients.consumer.RoundRobinAssignor  把主题的所有分区逐个分配给消费者

  client.id

    任意字符串,broker用来标识从客户端发送来的消息

  max.poll.records

    用于控制单次调用call() 方法返回的记录数量,可以帮你控制在轮询里需要处理的数据量

  receive.buffer.bytes 和 send.buffer.bytes

    默认-1

更新分区当前位置的操作叫提交

  消费者会向一个叫做 _consumer_offset 的特殊主题发送消息,消息里包含了每个分区的偏移量

  

  Kafka可以设置消费者自动提交偏移量,设置enable.auto.commit=true,提交时间间隔auto.commit.interval.ms=5s

  自动提交是在轮询里进行的,消费者每次轮询时会检查是否该提交偏移量了,是则提交上一次轮询返回的偏移量

  提交当前偏移量,使用API函数 commitSync()

  异步提交偏移量,使用API函数commitAsync()

    可以使用一个单调递增的序列号来维护异步提交顺序

  

Kafka笔记4(消费者)的更多相关文章

  1. Kafka笔记整理(三):消费形式验证与性能测试

    Kafka消费形式验证 前面的<Kafka笔记整理(一)>中有提到消费者的消费形式,说明如下: .每个consumer属于一个consumer group,可以指定组id.group.id ...

  2. 关于Kafka 的 consumer 消费者处理的一些见解

    前言 在上一篇 Kafka使用Java实现数据的生产和消费demo 中介绍如何简单的使用kafka进行数据传输.本篇则重点介绍kafka中的 consumer 消费者的讲解. 应用场景 在上一篇kaf ...

  3. [Spark][kafka]kafka 生产者,消费者 互动例子

    [Spark][kafka]kafka 生产者,消费者 互动例子 # pwd/usr/local/kafka_2.11-0.10.0.1/bin 创建topic:# ./kafka-topics.sh ...

  4. kafka生产者和消费者流程

    前言 根据源码分析kafka java客户端的生产者和消费者的流程. 基于zookeeper的旧消费者 kafka消费者从消费数据到关闭经历的流程. 由于3个核心线程 基于zookeeper的连接器监 ...

  5. Apache Kafka 0.9消费者客户端

    当Kafka最初创建时,它与Scala生产者和消费者客户端一起运送.随着时间的推移,我们开始意识到这些API的许多限制.例如,我们有一个“高级”消费者API,它支持消费者组并处理故障转移,但不支持许多 ...

  6. kafka笔记——入门介绍

    中文文档 目录 kafka的优势 首先几个概念 kafka的四大核心API kafka的基本术语 主题和日志(Topic和Log) 每个分区都是一个顺序的,不可变的队列,并且可以持续的添加,分区中的每 ...

  7. 《Kafka笔记》1、Kafka初识

    目录 一.初识Kafka 1 apache kafka简介 2 消息中间件kafka的使用场景 2.1 订阅与发布队列 2.2 流处理 3 kafka对数据的管理形式 4 kafka基础架构 5 Ka ...

  8. kafka生产者和消费者api的简单使用

    kafka生产者和消费者api的简单使用 一.背景 二.需要实现的功能 1.生产者实现功能 1.KafkaProducer线程安全的,可以在多线程中使用. 2.消息发送的key和value的序列化 3 ...

  9. Kafka学习笔记4--Kafka消费者的客户端(PHP)开发

    一.准备工作 虽然 Kafka 是用 Java/Scala 语言编写的,但这不妨碍它对多语言的支持.可以在 Kafka 官网的 CLIENTS 查看 Kafka 支持的语言,其中包括 C/C++.Py ...

随机推荐

  1. SpringMVC-2-(Controller)

    一)参数类型 @RequestMapping("hello4") @ResponseBody public ModelAndView Hello4( // Servlet的三个参数 ...

  2. Mapreduce的排序(全局排序、分区加排序、Combiner优化)

    一.MR排序的分类 1.部分排序:MR会根据自己输出记录的KV对数据进行排序,保证输出到每一个文件内存都是经过排序的: 2.全局排序: 3.辅助排序:再第一次排序后经过分区再排序一次: 4.二次排序: ...

  3. import文件时 ~/ 不识别问题(react)

    在最近写的react的项目中,在webpack中配置的“~”可以定位到根路径,但是知道在同事在windows中跑程序时,发现怎么都不识别这个路径,所有相关文件都could not find modul ...

  4. ISP PIPLINE(零) 知识综述预热之光学概念篇

    1.光学成像关系如下:这是我看到最清晰的易懂的数学关系图 2.上面的知识了解完,camera应用的知识就是Autofocus技术,自动对焦 马达的起始位置一般在焦距处,由上面光学数学关系可知,焦距处可 ...

  5. GUI Design Studio的使用方法

    一.GUI Design Studio的介绍 GUI DesignStudio 是一个给应用软件设计图形用户界面的专业工具,它可在画基于web形态的原型时,可以用 Axure RP. Balsamiq ...

  6. ECMA Script 6_模块加载方案 ES6 Module 模块语法_import_export

    1. 模块加载方案 commonJS 背景: 历史上,JavaScript 一直没有模块(module)体系, 无法将一个大程序拆分成互相依赖的小文件,再用简单的方法拼装起来. 其他语言都有这项功能: ...

  7. __http原理__HTTP 协议简介

    HTTP 协议通信流程 超文本 除了文本以外,还有其他数据类型的内容 HTTP 协议 指计算机网络通信中 两台计算机之间所必须遵守的规定或规则 Hypertext Transport Protocol ...

  8. mac charles抓安卓(小米)http包

    网上有很多的教程说明如何操作,都写的很好,比如 https://blog.csdn.net/luochoudan/article/details/72801573,我在这里补充一点,非常重要的一点:手 ...

  9. 英特尔神经棒使用入门-NCS2 & NCS1 -OpenVino

    |--背景: NCS1使用的NCSDK1和NCSDK2,速度一般,没有想象中的速度,能有TX2一半的速度吧.跟大佬又申请了个NCS2来试一试. 环境配置到跑通自己写的MNIST分类网络花了2天不到吧. ...

  10. HDU 6321 Dynamic Graph Matching

    HDU 6321 Dynamic Graph Matching (状压DP) Problem C. Dynamic Graph Matching Time Limit: 8000/4000 MS (J ...