前言

  与生产者客户端一样,消费者端也由最初的scala版本过渡到现在的Java版本。

  正常的消费者逻辑需要以下4个步骤:

  1. KafkaConsumer的客户端参数配置和对应实例;
  2. 订阅主题
  3. 拉取消息并消费
  4. 提交消费者位移
  5. 关闭消费者实例

  消费者客户端比较特殊的一点是加入了消费者组的概念;


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消费者使用方式的更多相关文章

  1. kafka 消费者offset记录位置和方式

    我们大家都知道,kafka消费者在会保存其消费的进度,也就是offset,存储的位置根据选用的kafka api不同而不同. 首先来说说消费者如果是根据javaapi来消费,也就是[kafka.jav ...

  2. kafka消费者客户端(0.9.0.1API)

    转自:http://orchome.com/203 kafka客户端从kafka集群消费消息(记录).它会透明地处理kafka集群中服务器的故障.它获取集群内数据的分区,也和服务器进行交互,允许消费者 ...

  3. Kafka消费者-从Kafka读取数据

    (1)Customer和Customer Group (1)两种常用的消息模型 队列模型(queuing)和发布-订阅模型(publish-subscribe). 队列的处理方式是一组消费者从服务器读 ...

  4. Kafka集群安装部署、Kafka生产者、Kafka消费者

    Storm上游数据源之Kakfa 目标: 理解Storm消费的数据来源.理解JMS规范.理解Kafka核心组件.掌握Kakfa生产者API.掌握Kafka消费者API.对流式计算的生态环境有深入的了解 ...

  5. Kafka权威指南 读书笔记之(四)Kafka 消费者一一从 Kafka读取数据

    KafkaConsumer概念 消费者和消费者群组 Kafka 消费者从属于消费者群组.一个群组里的消费者订阅的是同一个主题,每个消费者接收主题一部分分区的消息. 往群组里增加消费者是横向伸缩消费能力 ...

  6. Kafka消费者APi

    Kafka客户端从集群中消费消息,并透明地处理kafka集群中出现故障服务器,透明地调节适应集群中变化的数据分区.也和服务器交互,平衡均衡消费者. public class KafkaConsumer ...

  7. JAVA封装消息中间件调用二(kafka消费者篇)

    上一遍我简单介绍了kafka的生成者使用,调用方式比较简单,今天我给大家分享下封装kafka消费者,作为中间件,我们做的就是最大程度的解耦,使业务方接入我们依赖程度降到最低. 第一步,我们先配置一个消 ...

  8. kafka消费者客户端

    Kafka消费者 1.1 消费者与消费者组 消费者与消费者组之间的关系 ​ 每一个消费者都隶属于某一个消费者组,一个消费者组可以包含一个或多个消费者,每一条消息只会被消费者组中的某一个消费者所消费.不 ...

  9. Kafka 学习之路(四)—— Kafka消费者详解

    一.消费者和消费者群组 在Kafka中,消费者通常是消费者群组的一部分,多个消费者群组共同读取同一个主题时,彼此之间互不影响.Kafka之所以要引入消费者群组这个概念是因为Kafka消费者经常会做一些 ...

  10. Kafka 系列(四)—— Kafka 消费者详解

    一.消费者和消费者群组 在 Kafka 中,消费者通常是消费者群组的一部分,多个消费者群组共同读取同一个主题时,彼此之间互不影响.Kafka 之所以要引入消费者群组这个概念是因为 Kafka 消费者经 ...

随机推荐

  1. linux服务器登录微信报警通知

    linux服务器ssh登录安全规则中,理论上要做到:防火墙限制,hosts.allow限制,root禁止登录,用户权限分配,ssh端口修改,登录时间限制,堡垒机登录. 这里只讲登录时间限制和登录报警通 ...

  2. 让你的Linux像黑客帝国的画面一样炫酷

    #sudo  apt-add-repository ppa:hollywood/ppa #sudo  apt-get install hollywood #sudo  apt-get  install ...

  3. 华为eNSP的防火墙(USG6000V)如何使用Web界面登入

    文章目录 华为eNSP的防火墙(USG6000V)如何使用Web界面登入 前言 一.使用步骤 1.导入USG6000V的镜像包 总结 前言 在华为的eNSP的模拟器上如何使用Web界面去管理与使用模拟 ...

  4. C#依赖注入-初步概念了解

    维基百科说:"依赖注入是一种软件设计模式,在这种模式下,一个或更多的依赖(或服务)被注入(或者通过引用传递)到一个独立的对象(或客户端)中,然后成为了该客户端状态的一部分.该模式分离了客户端 ...

  5. c# TabControl控件中TabPage选项卡切换时触发的事件

    选项卡切换触发的是tabcontrol控件的SelectedIndexChanged事件. 当tabcontrol控件的任何一个tabpage被点击或选择,即发生SelectedIndexChange ...

  6. Tableau绘图一热图、日历图、人口金字塔、标靶图、凹凸图、帕累托图

    Tableau绘图一热图.日历图.人口金字塔.标靶图.凹凸图.帕累托图 本文首发于博客冰山一树Sankey,去博客浏览效果更好.直接右上角搜索该标题即可 一.热图 例子:示例超市 可以通过更改颜色来改 ...

  7. mysql保存emoji表情,utf8mb4保存不了表情的问题

    报错信息 : Incorrect string value: '\xF0\x9F\x99\x85\xE2\x80...' for column 'content' at row 1 mysql数据库的 ...

  8. Owin + WebApi + OAuth2 搭建授权模式(授权码模式 Part I)

    绪 最近想要整理自己代码封装成库,也十分想把自己的设计思路贴出来让大家指正,奈何时间真的不随人意. 想要使用 OWIN 做中间件服务,该服务中包含 管线.授权 两部分.于是决定使用 webapi .O ...

  9. 35 异常机制 异常处理机制 异常处理五个关键字 try、catch、finally、throw、thorws 代码

    异常处理机制 概念 抛出异常 捕获异常 异常处理五个关键字 try.catch.finally.throw.thorws 代码 // main { int a = 1; int b = 0; // 假 ...

  10. C++移动语义 详细讲解【Cherno C++教程】

    移动语义 本文是对<最好的C++教程>的整理,主要是移动语义部分,包含视频85p左值和右值.89p移动语义与90p stdmove和移动赋值操作符. 移动语义是C++11的新feature ...