SparkStreaming对接kafka消费模式区别

南墨2年前技术文章699

Sparkstreaming对接kafka使用的消费方式与常规的kafka消费方式完全不同,其中区别主要为消费者的管理方式不同。


Ø  常规消费模式

Kafka常规的消费模式以消费者组为消费单元,每个消费者组中有一个或者多个消费者并行消费。如下图,若消费者个数小于topic分区个数,则每个消费者至少对应一个或者多个topic的分区,并且每个消费者分别管理自己的offset

 1.png


通过消费者组查看命令查询结果如下:

./kafka-consumer-groups.sh  --bootstrap-server kafkaip:port --describe --group DemoConsumer  --command-config ../config/consumer.properties

 

可以看到,每个不同的消费线程对应一个分区,每个不同的消费者根据offset提交方式(由enable.commit.offset)决定。

TOPIC      PARTITION   CURRENT-OFFSET   LOG-END-OFFSET   LAG             CONSUMER-ID                                     HOST            CLIENT-ID

testsparktopic  6          181196454       181209277       12823           consumer-1-b565f214-7520-43ea-kc90-aa7413nchd8 /192.168.x.5        consumer-1

testsparktopic  0          181356668       181374425       17757           consumer-1-b565f214-7520-43ea-mk88-kiu188790kak /192.168.x.5       consumer-1

testsparktopic  7          181239524       181257314       17790           consumer-1-b565f214-7520-43ea-51cb-lcjksui13ioop3 /192.168.x.5       consumer-1

testsparktopic  3          181239304       181259594       20290           consumer-1-b565f214-7520-43ea-3hjk -scasd9878789 /192.168.x.5       consumer-1

testsparktopic  4          181239259       181252050       12791           consumer-1-b565f214-7520-43ea-kh87-kihhdu876561 /192.168.x.5       consumer-1

testsparktopic  5          181239743       181252534       12791           consumer-1-b565f214-7520-43ea-09ij-lkdk1948jc82jd /192.168.x.5       consumer-1

testsparktopic  2          181458361       181471151       12790           consumer-1-b565f214-7520-43ea-4d5h-09dikc78dj19d /192.168.x.5       consumer-1

testsparktopic  1          180555802       180568625       12823           consumer-1-b565f214-7520-43ea-7u8s-opo398834kc1 /192.168.x.5       consumer-1

 

 

Ø  SparkStreaming的消费模型

Sparkstreaming作为微批处理的实时流处理引擎,对kafka的数据获取方式有一些差别,在每个job里面运行了两组driver consumer executor consumerdriverconsumer负责分配和提交offset到初始化好的KafkaRDD当中去,KafkaRDD内部会根据分配到的每个topic的每个partition初始化一个CachedKafkaConsumer客户端通过assgin的方式订阅到topic拉取数据assgin模式:精确获取到每个分区中要消费的offset值的范围,并且消费)。如下图

2.png

如果在sparkStreaming中设置了enable.commit.offsettrue,也可以从后台看到driver consumer的提交信息。如下

TOPIC                 PARTITION    CURRENT-OFFSET  LOG-END-OFFSET  LAG             CONSUMER-ID                        HOST            CLIENT-ID

testsparktopic  6          181196454       181209277       12823           consumer-1-b565f214-7520-43ea-a695-cc94a4ccd47c /192.168.184.5  consumer-1

testsparktopic  0          181356668       181374425       17757           consumer-1-b565f214-7520-43ea-a695-cc94a4ccd47c /192.168.184.5  consumer-1

testsparktopic  7          181239524       181257314       17790           consumer-1-b565f214-7520-43ea-a695-cc94a4ccd47c /192.168.184.5  consumer-1

testsparktopic  3          181239304       181259594       20290           consumer-1-b565f214-7520-43ea-a695-cc94a4ccd47c /192.168.184.5  consumer-1

testsparktopic  4          181239259       181252050       12791           consumer-1-b565f214-7520-43ea-a695-cc94a4ccd47c /192.168.184.5  consumer-1

testsparktopic  5          181239743       181252534       12791           consumer-1-b565f214-7520-43ea-a695-cc94a4ccd47c /192.168.184.5  consumer-1

testsparktopic  2          181458361       181471151       12790           consumer-1-b565f214-7520-43ea-a695-cc94a4ccd47c /192.168.184.5  consumer-1

testsparktopic  1          180555802       180568625       12823           consumer-1-b565f214-7520-43ea-a695-cc94a4ccd47c /192.168.184.5  consumer-1

由于只有driver consumer提交offset,因此这里的消费线程只有一个。

sparkstreaming各个模块的对应关系如下,每个sparkjob中会启动一个driver,每个driver会对应多个excutor中可以启动多个task,通常情况下excutor consumertask应该是一一对应的。

3.png


相关文章

企业级大数据安全架构(一)

前言1.企业级大数据平台安全隐患目前企业级大数据平台面临的一些安全隐患,只要将这些安全隐患全部解决之后才可以部署到生产环境去使用,因此安全性是大数据平台必备的能力之一。1.1缺乏统一的访问控制机制大数...

MySQL运维实战之备份和恢复(8.7)将数据库恢复到指定时间点的另外一种方法

使用mysql原生复制功能实现时间点恢复使用mysqlbinlog解析并执行binlog是实现mysql时间点恢复的一种常用的方法。这里提供另外一种实现时间点恢复的方法:使用mysql的复制功能来实现...

Linux解锁线程基本概念和线程控制,步入多线程学习的大门(2)

Linux解锁线程基本概念和线程控制,步入多线程学习的大门(2)

2.4.线程等待:为什么需要线程等待?已经退出的线程,其空间没有被释放,仍然在进程的地址空间内。不然也会造成内存泄露问题!创建新的线程不会复用刚才退出线程的地址空间。主线程退出 == 进程退出 ==...

CDP实操--集群配置Auto-TLS

CDP实操--集群配置Auto-TLS

1.1手动创建CA证书# mkdir -p /tls/ca # ls /tls # cd /tls/ca # openssl genrsa -out ca.key 2048 # cat ca....

从Docker拉取镜像一直失败超时?这些解决方案帮你解决烦恼

设置国内源:提示:常规方案(作用不大)阿里云提供了镜像源:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors 登录后你会获得一个专属...

flink-hive方言配置(Hive Dialect)

简介       在使用 Hive 方言时,Flink 允许用户用 Hive 语法来编写 SQL 语句。 通过提供与 Hive 语法的兼容性,我们旨在改善与 Hive 的互操作性,并减少用户需要在 F...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。