Kafka03--Kafka消费者使用方式
前言
与生产者客户端一样,消费者端也由最初的scala版本过渡到现在的Java版本。
正常的消费者逻辑需要以下4个步骤:
- KafkaConsumer的客户端参数配置和对应实例;
- 订阅主题
- 拉取消息并消费
- 提交消费者位移
- 关闭消费者实例
消费者客户端比较特殊的一点是加入了消费者组的概念;
KafkaConsumer消费者组
默认情况下:
- 一个消费者组中的每个消费者会分配到不同的分区;
- 一个topic中的消息只会被一个消费者组消费一次;
- 若一个组中的消费者数量多于partition数量,会出现消费者不会被分配分区,也就消费不到消息(如下c7消费不到数据);

KafkaConsumer使用示例
1 public class KafkaConsumerAnalysis {
2 public static final String brokerList = "10.26.28.99:9092";
3 public static final String topic = "demo";
4 public static final String groupId = "group.demo";
5 public static final AtomicBoolean isRunning = new AtomicBoolean(true);
6
7 public static Properties initConfig() {
8 Properties props = new Properties();
9 props.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class.getName());
10 props.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class.getName());
11 props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, brokerList);
12 // 消费者组
13 props.put(ConsumerConfig.GROUP_ID_CONFIG, groupId);
14 // 该客户端的id
15 props.put(ConsumerConfig.CLIENT_ID_CONFIG, "consumer.client.id.demo");
16 return props;
17 }
18
19 public static void main(String[] args) {
20 Properties props = initConfig();
21 KafkaConsumer<String, String> consumer = new KafkaConsumer<>(props);
22 // 订阅某几个topic
23 consumer.subscribe(Arrays.asList(topic));
24 // 订阅demo的0号分区(订阅方式只能配置一种)
25 // consumer.assign(Arrays.asList(new TopicPartition("demo", 0)));
26 try {
27 while (isRunning.get()) {
28 //1000ms从服务端拉取一次
29 ConsumerRecords<String, String> records = consumer.poll(Duration.ofMillis(1000));
30 for (ConsumerRecord<String, String> record : records) {
31 //do something to process record.
32 }
33 }
34 } catch (Exception e) {
35 log.error("occur exception ", e);
36 } finally {
37 consumer.close();
38 }
39 }
40 }
简单使用示例
订阅主题与订阅分区(两者中只能配置一种,否则爆出IllegalStateException异常):
//订阅topic
consumer.subscribe(Arrays.asList(topic));
// 订阅demo的0号分区(订阅方式只能配置一种)
consumer.assign(Arrays.asList(new TopicPartition("demo", 0)));
KafkaConsumer的反序列化类最好还是使用kafka提供的几种方式:如 StringDeserializer 等;
KafkaConsumer消息消费与唯一提交(TODO)
Kafka03--Kafka消费者使用方式的更多相关文章
- kafka 消费者offset记录位置和方式
我们大家都知道,kafka消费者在会保存其消费的进度,也就是offset,存储的位置根据选用的kafka api不同而不同. 首先来说说消费者如果是根据javaapi来消费,也就是[kafka.jav ...
- kafka消费者客户端(0.9.0.1API)
转自:http://orchome.com/203 kafka客户端从kafka集群消费消息(记录).它会透明地处理kafka集群中服务器的故障.它获取集群内数据的分区,也和服务器进行交互,允许消费者 ...
- Kafka消费者-从Kafka读取数据
(1)Customer和Customer Group (1)两种常用的消息模型 队列模型(queuing)和发布-订阅模型(publish-subscribe). 队列的处理方式是一组消费者从服务器读 ...
- Kafka集群安装部署、Kafka生产者、Kafka消费者
Storm上游数据源之Kakfa 目标: 理解Storm消费的数据来源.理解JMS规范.理解Kafka核心组件.掌握Kakfa生产者API.掌握Kafka消费者API.对流式计算的生态环境有深入的了解 ...
- Kafka权威指南 读书笔记之(四)Kafka 消费者一一从 Kafka读取数据
KafkaConsumer概念 消费者和消费者群组 Kafka 消费者从属于消费者群组.一个群组里的消费者订阅的是同一个主题,每个消费者接收主题一部分分区的消息. 往群组里增加消费者是横向伸缩消费能力 ...
- Kafka消费者APi
Kafka客户端从集群中消费消息,并透明地处理kafka集群中出现故障服务器,透明地调节适应集群中变化的数据分区.也和服务器交互,平衡均衡消费者. public class KafkaConsumer ...
- JAVA封装消息中间件调用二(kafka消费者篇)
上一遍我简单介绍了kafka的生成者使用,调用方式比较简单,今天我给大家分享下封装kafka消费者,作为中间件,我们做的就是最大程度的解耦,使业务方接入我们依赖程度降到最低. 第一步,我们先配置一个消 ...
- kafka消费者客户端
Kafka消费者 1.1 消费者与消费者组 消费者与消费者组之间的关系 每一个消费者都隶属于某一个消费者组,一个消费者组可以包含一个或多个消费者,每一条消息只会被消费者组中的某一个消费者所消费.不 ...
- Kafka 学习之路(四)—— Kafka消费者详解
一.消费者和消费者群组 在Kafka中,消费者通常是消费者群组的一部分,多个消费者群组共同读取同一个主题时,彼此之间互不影响.Kafka之所以要引入消费者群组这个概念是因为Kafka消费者经常会做一些 ...
- Kafka 系列(四)—— Kafka 消费者详解
一.消费者和消费者群组 在 Kafka 中,消费者通常是消费者群组的一部分,多个消费者群组共同读取同一个主题时,彼此之间互不影响.Kafka 之所以要引入消费者群组这个概念是因为 Kafka 消费者经 ...
随机推荐
- Python+selenium自动循环发邮件
Python源代码如下: # coding=utf-8 from selenium import webdriver from time import sleep from random import ...
- log4j的替换方案
去年12月份,随着log4j暴露出高危漏洞,对于 Java 开发人员来说不是一个好消息,对于 Ops 来说更是如此.前者必须使用固定的 Log4J 版本重新打包他们的应用程序,而后者必须重新部署.但对 ...
- mysql学习+再复习
mysql 函数 单行函数 exists 是否存在 字符函数 concat(a,b)拼接两个字符串 ifnull(a+b,0) 如果a+b等于null,则返回0 upper,lower 大小写 ...
- 一、Java 特性和运行机制
目录 Java 特性和优势 Java应用程序的运行机制 JVM.JRE和JDK Java 特性和优势 跨平台/可移植性 核心优势.比如:Java的int型永远是32位,C++(16,32). 安全性 ...
- vue--vue-router 组件映射到路由
前言 地址栏路由的发展经历了后端路由配置阶段.前后端分离阶段.直至单页面富应用阶段.本文来总结一下 vue-router 的相关知识点和用法. 正文 1.什么是 vue-router 路由 路由就是S ...
- Golang 包管理机制
Golang 包管理机制 1. 历史 在go1.11之前, 并没有官方的包管理机制(Godep算个半官方), 主流的包管理机制有: GoVendor Glide Godep 在go1.11之后, 官方 ...
- mysql 的奇妙历险
mysql 的奇妙历险 这几天在练习sql的时候,碰到下面几个题, 如下 他的表字段是这些 create table Student( SId varchar(10), # 学生id Sname va ...
- SaaS平台是什么,为什么字节、腾讯等大厂都在抢相关人才
SaaS平台很多人可能没听说是什么,但是从事TO B公司的员工来说,SaaS平台应该都有所耳闻.从2016年开始,腾讯开始发力TO B算起,到处在挖TO B公司的骨干人才,而熟悉SaaS平台的人才竞 ...
- Linux 中CPU 和 GPU 的行为监控
由于 Steam(包括 Steam Play,即 Proton)和一些其他的发展,GNU/Linux 正在成为越来越多计算机用户的日常游戏平台的选择.也有相当一部分用户在遇到像视频编辑或图形设计等(K ...
- 匿名函数 =匿名方法+ lambda 表达式
匿名函数的定义和用途 匿名函数是一个"内联"语句或表达式,可在需要委托类型的任何地方使用. 可以使用匿名函数来初始化命名委托[无需取名字的委托],或传递命名委托(而不是命名委托类型 ...