栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

大数据之Kafka(下)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

大数据之Kafka(下)

Kafka(下)
  • 前言
  • 一、kafka生产数据的应答机制
  • 二、kafka生产数据
  • 三、kafka的数据消费
    • 3.1 kafka的数据消费
    • 3.2 kafka的再平衡
  • 四、kafka消费方式
  • 五、kafka中副本的数据存储机制
  • 六、kafka 分区
    • 6.1 分区原因
    • 6.2 分区选择原则
    • 6.3 分区消费策略
      • 6.3.1 Range 范围分区策略
      • 6.3.2 RoundRobin 分区策略
  • 总结


前言

大数据之Kafka(上)中介绍了Kafka的基本概念,包括:Kakfa的定义、Kafka的架构、Kafka的特点等。本文会介绍有关Kafka的数据生产、消费以及分区的相关知识。


一、kafka生产数据的应答机制

1 :生产者发送数据(kafka默认),等待Leader应答,如果应答完成,才发送下一条数据,不关心follower是否接受成功,效率会慢一些,但是数据比较安全。但是在leader保存数据成功后,突然宕机,此时follower还没有保存数据,那么数据就会丢失。

0 :生产者发送数据,不关心数据是否到达kafka,直接发送下一条,效率高但是数据丢失的可能性大

-1(all) :生产者发送数据,需要等待所有副本(follower+leader)的应答,这种方式效率最低但是数据也最安全。

二、kafka生产数据


   生产者通过sender向集群询问topic的分区信息,两者建立连接,集群将信息返回给生产者(因为Broker的信息存储在zookeeper中,集群和zookeeper一直连接)。生产者生产数据到p0,p1中,但是并不是每生产一个数据就向集群中传输一个数据,而是有一个双端队列(DQ)用来存储数据。Sender会定期访问DQ,如果队列满了或者到达了数据的传输时间,便将数据传输到集群中。

   DQ:正常的队列是一边进一边出,DQ是两边都可以进出,避免在数据被sender读出时失败,DQ可以再将数据写会到队列中。如果是普通队列,数据取出失败,就会将失败的数据追加到队列头部,打乱了数据的顺序。

三、kafka的数据消费 3.1 kafka的数据消费


   消费者组先访问zookeeper获取集群的相关信息(老版本的kafka,新版本的kafka在集群中就会有相关信息)。得到后,再去读取数据,读取数据同样先放到一个缓冲区中再读入。

3.2 kafka的再平衡


   如果原来有三个分区,A消费p0,B =消费p1,p2,此时又多了一个消费者,此时消费者会触发再平衡的效果。此时就会取消目前正在消费的状态,重新获取集群的信息,再重新分配消费(在消费者组中选出一个leader来分)

四、kafka消费方式

   kafka的消费者采用pull(拉)模式从broker中读取数据。因为push模式很难适应消费速率不同的消费者,因为消息发送速率是由broker决定的,他的目标是以最快的速度将数据传递出去,很容易造成消费者来不及处理数据。

五、kafka中副本的数据存储机制

问题:当向Leader中写入数据后,follower还没有来的及取数据,此时leader挂掉,follower会成为新的leader,那么数据如何同步?
   在kafka中通过HW(High WaterMark 高水位)和 LEO(Log End Offset 日志最后偏移)来进行副本之间的数据同步,同时这也是保证所有消费者端数据一致性的策略;其中HW取自所有副本中LEO的最小值

初始的Leader Follower状态:

Leader中新增一条数据:

   此时Leader中的LEO变为4,但是因为HW还是3,所以用户还是只能得到前三条数据;Follower会定期的访问Leader,发现Leader的LEO变化了,就要取出数据,此时

  (1)第一种情况,此时Leader挂掉了

   Follower的HW 和 LEO都不变,此时follower变成Leader,用户还是只能看到前三条,所以对于用户来说,数据并没有丢失。至于第四条数据重新发送就可以。

  (2)第二种情况,Follower成功拿到数据,在向leader发送确认消息的时候,Leader挂掉



   此时,follower的LEO变为4,由于Leader挂掉,follower成为Leader,所以他的HW也变为4(最小的LEO此时也是4),所以用户可以看到四条数据,数据仍然没有丢失。

  (3)第三种情况,Follower成功拿到数据,在向leader发送确认消息的时候,Leader收到

六、kafka 分区 6.1 分区原因

  (1)方便在集群中扩展,每个partition可以通过调整以适应他所在的机器,而一个topic又可以由多个partition组成,因此整个集群就可以适应任意大小的数据

  (2)可以提高并发,因为可以以partition为单位读写了。

6.2 分区选择原则

  (1) 指定了分区,直接使用;

  (2) 未指定分区但是指定了key,通过对key进行hash出一个分区;

  (3) 都未指定,使用轮询选出一个partition

6.3 分区消费策略 6.3.1 Range 范围分区策略

  该策略是对每个 topic 而言的。首先对同一个 topic 里面的分区按照序号进行排序,并对消费者按照字母顺序进行排序。假如现在有 10 个分区,3 个消费者,排序后的分区将会是0,1,2,3,4,5,6,7,8,9;消费者排序完之后将会是C1-0,C2-0,C3-0。通过 partitions数/consumer数 来决定每个消费者应该消费几个分区。如果除不尽,那么前面几个消费者将会多消费 1 个分区。

6.3.2 RoundRobin 分区策略

  轮询分区策略,是把所有的 partition 和所有的 consumer 都列出来,然后按照 hascode 进行排序,最后通过轮询算法来分配 partition 给到各个消费者。


总结

大数据之Kafka(上)中介绍了Kafka的基本概念,包括:Kakfa的定义、Kafka的架构、Kafka的特点等。本文介绍了有关Kafka的数据生产、消费以及分区的相关知识,如果有不足之处或者表述不当的地方欢迎大家指正。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/585006.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号