SparkStreaming对接kafka消费模式区别

南墨3年前技术文章1625

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


相关文章

压测实操--nnbench压测hdfs_namenode负载方案

压测实操--nnbench压测hdfs_namenode负载方案

本次压测使用nnbench对namenode负载进行性能测试。nnbench生成很多与HDFS相关的请求,给NameNode施加较大的压力,这个测试能在HDFS上创建、读取、重命名和删除文件操作。对应...

ranger_audits更换审计日志保留时间

ranger_audits更换审计日志保留时间

本次测试集群为:hdp: 3.1.5.0-152Infra Solr: 0.1.0Ranger: 1.2.0.3.1修改Solr 的中ranger_audits 数据保留时长HDP、CDP中Range...

LINUX 安全运维-文件安全

LINUX 安全运维-文件安全

文件的ACL针对文件以及文件夹我们在新建的时候,通常会有一个默认的权限:[rootobogontmplmkdirtest[rootcbogontmp]touchtestxt[rootcbogontmp...

Clickhouse MergeTree异常数据处理

说明clickhouse mergetree的数据文件如果遇到数据损坏,可能会导致clickhouse无法启动。本文章说明如何处理这类问题。测试我们先人为模拟破坏mergetree数据文件:detac...

PostgreSQL 逻辑备份详解

前言当谈到关系型数据库的备份和恢复时,逻辑备份是一种备份方法,它备份数据库的逻辑结构和数据,而不是直接备份磁盘上的物理数据。这样做有许多好处,比如备份速度更快,可以选择性地备份数据库中的某些数据,以及...

聊一聊什么是分布式系统

聊一聊什么是分布式系统

分布式系统原理1 概念1.1 模型节点在具体的工程项目中,一个节点往往是一个操作系统上的进程。在本文的模型中,认为节点是一个完整的、不可分的整体,如果某个程序进程实际上由若干相对独立部分构成,则在模型...

发表评论    

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