应用程序使用KafkaConsumer向Kafka订阅主题,并从订阅的主题上接收消息。Kafka消费者从属于消费者群组,一个群组里的消费者订阅的是同一个主题,每个消费者接收主题的一部分分区的消息。

一个分区不能被一个消费者群组里的多个消费者消费,因此如果消费者超过主题的分区数量,那么就有一部分消费者被闲置。

分区的所有权从一个消费者转移到另一个消费者,这样的行为叫做在均衡,不过在均衡期间消费者无法读取消息,造成整个群组一小段时间不可用。

消费者通过被指派为群组协调器的broker发送心跳来维持它们和群组的从属关系以及它们对分区的所有权关系。

在读取消息之前,首先创建一个KafkaConsumer对象,有三个必选属性:bootstrap.servers,key.deserializer,value.deserializer,第四个属性group.id不是必须的,它指定了消费者属于哪个消费者群组。

订阅主题consumer.subscribe()方法,可以指定特定主题,或使用正则表达式。消息轮询是消费者API的核心,通过一个简单的轮询向服务器请求数据。一旦消费者订阅了主题,轮询就会处理所有细节,包括群组协调,分区再均衡,发送心跳和获取数据。

返回的每条数据都包含记录所属主题信息,记录所做分区信息,记录在分区的偏移量,以及记录键值对。

在退出之前使用consume.close()关闭消费者,网络连接和socket也会随之关闭。

我们无法让一个线程运行多个消费者,也无法让多个线程安全共享一个消费者。按照规则,一个消费者使用一个线程。

消费者的配置

1.fetch.min.bytes

该属性指定了消费者从服务器获取记录的最小字节数。

2.fetch.max.wait.ms

指定broker的等待时间,默认是500ms,这个条件和上一个条件哪一个先满足,都会触发broker向消费者发送数据。

3.max.partition.fetch.bytes

该属性指定了服务器从每个分区返回给消费者的最大字节数,默认是1MB.这个数值必须比max.message.size大。

4.session.timeout.ms

该属性指定了消费者在被认为死亡之前可以与服务器断开连接的时间,默认是3秒,如果消费者没有在这个指定时间内发送心跳给群组协调器,就会被认为已经死亡。协调器就会触发在平衡,把它的分区分配给群组的其他消费者。这个属性与heartbeat.interval.ms紧密相关,这个属性指定了消费者可以多久不发送心跳。一般同时修改这两个属性,heartbeat.interval.ms一般是session.timeout.ms的三分之一。

5.auto.offset.reset

该属性指定了消费者在读取一个没有偏移量的分区,或偏移量无效情况下该作何处理,默认值是latest,意思是偏移量无效情况下,消费者从最新记录开始读取数据,另一个值是earliest,意思是从起始位置读取数据。

6.enable.auto.commit

该属性指定了消费者是否自动提交偏移量,默认是true,为了尽量避免重复数据和数据丢失,可以把它设为false,由自己控制何时提交偏移量。

7.partition.assignment.strategy

分区会被分配给群组的消费者,partitionAssignor根据给定消费者和主题,决定哪些分区应该被分配给哪个消费者,有两个默认分配策略:

Range:若干连续分区分配

RoundRobin:逐个分配给消费者

默认是org.apache.kafka.clients.consumer.RangeAssignor,这个类实现了Range策略,也可以改为org.apache.kafka.clients.consumer.RoundRobinAssignor

8.client.id

可以是任意字符串,broker用它标记从客户端发送过来的消息,通常被用在日志,度量指标和配额里。

9.max.poll.records

该属性用于控制单次调用call方法能够返回的记录数量

10.receive.buffer.bytes和send.buffer.bytes

socket读写数据时tcp缓冲区的大小,如果=-1,就使用操作系统默认值。

kafka笔记4的更多相关文章

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

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

  2. Kafka笔记整理(一)

    Kafka简介 消息队列(Message Queue) 消息 Message 网络中的两台计算机或者两个通讯设备之间传递的数据.例如说:文本.音乐.视频等内容. 队列 Queue 一种特殊的线性表(数 ...

  3. Kafka笔记—可靠性、幂等性和事务

    这几天很忙,但是我现在给我的要求是一周至少要出一篇文章,所以先拿这篇笔记来做开胃菜,源码分析估计明后两天应该能写一篇.给自己加油~,即使没什么人看. 可靠性 如何保证消息不丢失 Kafka只对&quo ...

  4. Kafka笔记

    最近做的一个项目需要跟Kafka打交道,学习了很多相关知识,就到这里来汇总一下. kafka是一个传递消息的系统,原本是用来快速记录海量log的,现在也经常用作消息队列.它主要由三个部分组成,prod ...

  5. kafka笔记-Kafka在zookeeper中的存储结构【转】

    参考链接:apache kafka系列之在zookeeper中存储结构  http://blog.csdn.net/lizhitao/article/details/23744675 1.topic注 ...

  6. Kafka笔记--指定消息的partition规则

    参数的设定:参考资料 不错的资料:http://blog.csdn.net/honglei915/article/details/37697655 http://developer.51cto.com ...

  7. Kafka笔记--监控系统KafkaOffsetMonitor

    KafkaOffsetMonitor下载链接: http://download.csdn.net/detail/changong28/7930337github官方:https://github.co ...

  8. Kafka笔记--使用ubuntu为bocker(服务器)windows做producer和comsumer(客户端)

    原文连接:http://www.cnblogs.com/davidwang456/p/4201875.html 程序仍然使用之前的一篇博文中的例子 :http://www.cnblogs.com/gn ...

  9. Kafka笔记--参数说明及Demo

    参考资料:http://blog.csdn.net/honglei915/article/details/37563647参数说明:http://ju.outofmemory.cn/entry/119 ...

  10. Kafka笔记--分布式环境搭建

    部署: http://www.cnblogs.com/likehua/p/3999538.html http://blog.csdn.net/kimmking/article/details/8263 ...

随机推荐

  1. 详解Qt,并举例说明动态编译(shared)和静态编译(static)以及debug and release 编译版本区别(可产生静态版的Debug版本,需要把-release 改为 –debug-and-release)

    作为初入Qt学习的新人,花了整整一两天时间,对Qt编译版本等问题进行了一步步探索,首先感谢网站博客中文章,开始也不是很明白一些几个问题: 1.Qt版本问题 作为初学者,可能下载时这么多版本,如何选择呢 ...

  2. 多线程下使用使用 UniDAC+MSSQL 需要注意的问题(使用CoInitialize)

    ADO线程不安全,UniDAC 在使用MSSQL也是如此.其实这是微软COM问题,不怪Devart公司. 一般解决方法是在线程开始启用 CoInitialize(nil),线程结束调用 CoUnini ...

  3. 关于undefind

    var undefined = "东方云游"; alert(undefined); // undefined 不一定为undefined ie8(包含ie8)以下会返回 " ...

  4. HDU-4432-Sum of divisors ( 2012 Asia Tianjin Regional Contest )

    Sum of divisors Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  5. SQL语句中使用Group by

    参考经典文章:https://blog.csdn.net/liu_shi_jun/article/details/51329472 1.group by 分组 ,每一组数据只有一行,如果group b ...

  6. 用ORACHK自己主动化检查数据库系统的健壮性

    1.orachk工具主要用途 (1)主动检查您的整个软件在操作系统.CRS.数据库.高可用等层面中的严重问题,以便于IT部门整改,提升系统的稳定性 (2)对于您系统中存在的风险提供简单化和合理化的诊断 ...

  7. PAMIE- Python实现IE自动化的模块

    PAMIE- Python实现IE自动化的模块(附 网易注册代码) 收藏 安装: 今晚弄了一下.已经成功导入PAMIE.具体步骤如下 1.假如你要用PAM30那就就得去下个Python 3.0安装.因 ...

  8. android该怎么办iphone那种画面抖动的动画效果(含有button和EditText)

    首先在效果图: 要做到抖动效果按钮,能够这样做.设定anim房源res以下.创建一个button_shake.xml <? xml version="1.0" encodin ...

  9. leetcode先刷_Pascal&#39;s Triangle II

    三角相对简答题.第一个问题是太简单.我不沾了,我一定会写.其实没什么的第二个问题,与这个问题计算路径有点像一个三角形,假定输入是n,然后从第一行计数到第一n行,保存在数据线上的时间到,由于只有相关的事 ...

  10. doesn't contain a valid partition table 解决方法

    输入 fdisk -l 可以看到 输入 fdisk /dev/xvdb 跟着向导一步步做下去(如果不知道该输入什么,就输入“m”并回车,可以打印出菜单): Command (m for help): ...