SparkStreaming对接kafka消费模式区别

南墨3年前技术文章1131

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


相关文章

mysql查线上数据注意数据库的隔离级别

数据库的隔离级别定义了一个事务可能对其他并发事务的可见性,以及它们可能对数据库的影响。隔离级别的选择影响着并发性能和数据的一致性,不同的隔离级别能够防止不同程度的并发问题,如脏读(Dirty Read...

TCP短连接和长连接

TCP短连接和长连接

     当网络通信时采用TCP协议时,在真正的读写操作之前,server与client之间必须建立一个连接,当读写操作完成后,双方不再需要这个连接时它们可以释放这个连接,连接的建立是需要三次握手的,...

Hive中小表与大表关联(join)的性能分析

经常看到一些Hive优化的建议中说当小表与大表做关联时,把小表写在前面,这样可以使Hive的关联速度更快,提到的原因都是说因为小表可以先放到内存中,然后大表的每条记录再去内存中检测,最终完成关联查询。...

oracle11g打补丁31537677验证报错

环境:操作系统: Kylin Linux Advanced Server V10数据库:oracle 11.2.0.4问题描述:打补丁31537677/时候补丁集对.so文件的验证报错$ORACLE_...

PG的analyze与vacuum

analyze-统计信息用于收集表的统计信息,只会对表加读锁,不影响表上其它SQL并发执行,对于大表只会读取表中部分数据 vacuum-碎片回收标记旧版本行的信息为可用,以重复使用这部分空间 更新统计...

yarn常用命令

1、yarn application 查看任务1.1 列出所有 Application: yarn application -list1.2 根据 Application 状态过滤:yarn appl...

发表评论    

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