Kafka中数据的流向
1: 多个消费者消费同一个Topic数据相同的数据
- (1)使用一个全新的"group.id"(就是之前没有被任何消费者使用过);
- (2)使用assign来订阅;
- # 例如 groupId
- @KafkaListener(topics = "test-syn",groupId = "test-2")
- public void send(ConsumerRecord<?, ?> record) {
- Optional<?> kafkaMessage = Optional.ofNullable(record.value());
- if (kafkaMessage.isPresent()) {
- Object messge = kafkaMessage.get();
- log.info("【KafkaListener监听到消息】" + messge);
- }
- }
注意:如果把 "enable.auto.commit" 设为 "false",使用 consumer.commitAsync(currentOffsets, null) 手动提交 offset ,是不能从头开始消费的
auto.offset.reset值含义解释:
- earliest
- 当各分区下有已提交的offset时,从提交的offset开始消费;无提交的offset时,从头开始消费
- latest
- 当各分区下有已提交的offset时,从提交的offset开始消费;无提交的offset时,消费新产生的该分区下的数据
- none
- topic各分区都存在已提交的offset时,从offset后开始消费;只要有一个分区不存在已提交的offset,则抛出异常
也就是说无论哪种设置,只要 kafka 中相同 group、partition 中已经有提交的 offset,则都无法从开始消费。
参考论坛:服务器重启了,那么该group是否会重新消费服务器里面所有的消息
KafkaConsumer.subscribe() : 为consumer自动分配partition,
有内部算法保证topic-partition以最优的方式均匀分配给同group下的不同consumer。如果有多个partition且只有一个消费者,则按顺序消费所有分区。不会重复消费。
KafkaConsumer.assign() : 为consumer手动、显示的指定需要消费的topic-partitions,
不受group.id限制,不提交offset,相当与指定的group无效(this method does not use the consumer's group management)。可以重复消费。
或者,这样做:
目前就 high level API 而言,offset 是存于 Zookeeper 中的,无法存于 HDFS,而 low level API 的 offset 是由自己去维护的,可以将之存于 HDFS 中。
2: 多个消费者消费同一个Topic数据不同数据
- # groupId 将多个消费者分配到同一个组下面
- @KafkaListener(topics = "test-syn",groupId = "test-1")
- public void send(ConsumerRecord<?, ?> record) {
- Optional<?> kafkaMessage = Optional.ofNullable(record.value());
- if (kafkaMessage.isPresent()) {
- Object messge = kafkaMessage.get();
- log.info("【KafkaListener监听到消息】" + messge);
- }
- }
- @KafkaListener(topics = "test-syn",groupId = "test-1")
- public void send(ConsumerRecord<?, ?> record) {
- Optional<?> kafkaMessage = Optional.ofNullable(record.value());
- if (kafkaMessage.isPresent()) {
- Object messge = kafkaMessage.get();
- log.info("【KafkaListener监听到消息】" + messge);
- }
- }
3: 各个消费者按组协调消费
- @KafkaListener(topics = "test-syn",groupId = "test-1")
- public void send(ConsumerRecord<?, ?> record) {
- Optional<?> kafkaMessage = Optional.ofNullable(record.value());
- if (kafkaMessage.isPresent()) {
- Object messge = kafkaMessage.get();
- log.info("【KafkaListener监听到消息】1" + messge);
- }
- }
- @KafkaListener(topics = "test-syn",groupId = "test-2")
- public void send2(ConsumerRecord<?, ?> record) {
- Optional<?> kafkaMessage = Optional.ofNullable(record.value());
- if (kafkaMessage.isPresent()) {
- Object messge = kafkaMessage.get();
- log.info("【KafkaListener监听到消息】2" + messge);
- }
- }
- @KafkaListener(topics = "test-syn",groupId = "test-3")
- public void send(ConsumerRecord<?, ?> record) {
- Optional<?> kafkaMessage = Optional.ofNullable(record.value());
- if (kafkaMessage.isPresent()) {
- Object messge = kafkaMessage.get();
- log.info("【KafkaListener监听到消息】1" + messge);
- }
- }
- @KafkaListener(topics = "test-syn",groupId = "test-2")
- public void send2(ConsumerRecord<?, ?> record) {
- Optional<?> kafkaMessage = Optional.ofNullable(record.value());
- if (kafkaMessage.isPresent()) {
- Object messge = kafkaMessage.get();
- log.info("【KafkaListener监听到消息】2" + messge);
- }
- }
- # 上面
- 1 2 3 收到相同的消费message
- 2 2 收到不同的message
Kafka中数据的流向的更多相关文章
- flink---实时项目--day02-----1. 解析参数工具类 2. Flink工具类封装 3. 日志采集架构图 4. 测流输出 5. 将kafka中数据写入HDFS 6 KafkaProducer的使用 7 练习
1. 解析参数工具类(ParameterTool) 该类提供了从不同数据源读取和解析程序参数的简单实用方法,其解析args时,只能支持单只参数. 用来解析main方法传入参数的工具类 public c ...
- SparkStreaming消费kafka中数据的方式
有两种:Direct直连方式.Receiver方式 1.Receiver方式: 使用kafka高层次的consumer API来实现,receiver从kafka中获取的数据都保存在spark exc ...
- flume实时采集mysql数据到kafka中并输出
环境说明 centos7(运行于vbox虚拟机) flume1.9.0(flume-ng-sql-source插件版本1.5.3) jdk1.8 kafka(版本忘了后续更新) zookeeper(版 ...
- Kafka消费者 从Kafka中读取数据并写入文件
Kafka消费者 从Kafka中读取数据 最近有需求要从kafak上消费读取实时数据,并将数据中的key输出到文件中,用于发布端的原始点进行比对,以此来确定是否传输过程中有遗漏数据. 不废话,直接上代 ...
- Flink 使用(一)——从kafka中读取数据写入到HBASE中
1.前言 本文是在<如何计算实时热门商品>[1]一文上做的扩展,仅在功能上验证了利用Flink消费Kafka数据,把处理后的数据写入到HBase的流程,其具体性能未做调优.此外,文中并未就 ...
- canal从mysql拉取数据,并以protobuf的格式往kafka中写数据
大致思路: canal去mysql拉取数据,放在canal所在的节点上,并且自身对外提供一个tcp服务,我们只要写一个连接该服务的客户端,去拉取数据并且指定往kafka写数据的格式就能达到以proto ...
- flink---实时项目--day01--1. openrestry的安装 2. 使用nginx+lua将日志数据写入指定文件中 3. 使用flume将本地磁盘中的日志数据采集到的kafka中去
1. openrestry的安装 OpenResty = Nginx + Lua,是⼀一个增强的Nginx,可以编写lua脚本实现⾮非常灵活的逻辑 (1)安装开发库依赖 yum install -y ...
- flink04 -----1 kafkaSource 2. kafkaSource的偏移量的存储位置 3 将kafka中的数据写入redis中去 4 将kafka中的数据写入mysql中去
1. kafkaSource 见官方文档 2. kafkaSource的偏移量的存储位置 默认存在kafka的特殊topic中,但也可以设置参数让其不存在kafka的特殊topic中 3 将k ...
- 大数据学习day32-----spark12-----1. sparkstreaming(1.1简介,1.2 sparkstreaming入门程序(统计单词个数,updateStageByKey的用法,1.3 SparkStreaming整合Kafka,1.4 SparkStreaming获取KafkaRDD的偏移量,并将偏移量写入kafka中)
1. Spark Streaming 1.1 简介(来源:spark官网介绍) Spark Streaming是Spark Core API的扩展,其是支持可伸缩.高吞吐量.容错的实时数据流处理.Sp ...
随机推荐
- Git将一个项目同时从本地推送到GitHub和Gitee
前言 博主是根据自己的情况写这篇博文的,每个人遇到的情况和需求可能不一样哈,所以初始的步骤也不一定一致,但是同时推送到Github和Gitee的步骤都会是一致滴! Gitee拉取Github仓库 直接 ...
- Ndarry对象
创建一个 ndarray 只需调用 NumPy 的 array 函数即可: numpy.array(object, dtype = None, copy = True, order = None, s ...
- 线程上下文类加载器ContextClassLoader内存泄漏隐患
前提 今天(2020-01-18)在编写Netty相关代码的时候,从Netty源码中的ThreadDeathWatcher和GlobalEventExecutor追溯到两个和线程上下文类加载器Cont ...
- [题解][Codeforces]Good Bye 2019 简要题解
构造题好评,虽然这把崩了 原题解 A 题意 二人游戏,一个人有 \(k_1\) 张牌,另一个人 \(k_2\) 张,满足 \(2\le k_1+k_2=n\le 100\),每张牌上有一个数,保证所有 ...
- [bzoj2152] [洛谷P2634] 聪聪可可
Description 聪聪和可可是兄弟俩,他们俩经常为了一些琐事打起来,例如家中只剩下最后一根冰棍而两人都想吃.两个人都想玩儿电脑(可是他们家只有一台电脑)--遇到这种问题,一般情况下石头剪刀布就好 ...
- 用Kolla在阿里云部署10节点高可用OpenStack
为展现 Kolla 的真正实力,我在阿里云使用 Ansible 自动创建 10 台虚机,部署一套多节点高可用 OpenStack 集群! 前言 上次 Kolla 已经表示了要打 10 个的愿望,这次我 ...
- Docker windows 容器启动失败 network not found
前几天由于重启了服务器,docker配置的网络出了些问题导致在docker容器中安装的mysql识别用户权限时发生错误.(从宿主机A以user身份 登入到容器B中安装的Mysql时,用户竟然不是use ...
- Sublime Text 3 部分安装过程记录
概览: Sublime Text 3下载网址 Package Control的安装 Install Package报错(There are no packages availabel for inst ...
- latex2e
classs and packages 这一节介绍新的latex文档结构, 以及新的文件类型: classs and packages 类和包是什么? lext 2.09和latex2e的主要差别就在 ...
- Docker在树莓派的安装与使用(Ubuntu Arm Server v19.10)
最近由于冠状病毒疫情的原因,只能够和小朋友家里蹲.这几天把尘封已久的那个树莓派拿出来继续捣鼓.希望能够做一个异构的分布式系统框架,于是想把Docker也安装到树莓派上,以便后期做进一步的开发和实验. ...