KAFKA的两种模式和分区策略


前言

kafkaKafka是一种高吞吐量的分布式发布订阅消息系统,用于处理流式数据成为我们大数据非常重要的组件之一

一、Kafka是什么?

Kafka是Apache旗下的一款分布式流媒体平台,Kafka是一种高吞吐量、持久性、分布式的发布订阅的消息队列系统。

二、2种模式

1.Peer-to-Peer (Queue)

{消息生产者生产消息发送到Queue中,然后消息消费者从Queue中取出并且消费消息。 消息被消费以后,queue 中不再有存储,所以消息消费者不可能消费到已经被消费的消息。 Queue 支持存在多个消费者,但是对一个消息而言,只会有一个消费者可以消费
在这里插入图片描述

2.Publish/Subscribe(Topic)

{消息生产者(发布)将消息发布到 topic 中,同时有多个消息消费者(订阅)消费该消 息。和点对点方式不同,发布到 topic 的消息会被所有订阅者消费。

三、kafka是如何实现高吞吐的

1.单台kafka为什么这么快

磁盘的顺序读写:

随机的读写:是需要在磁盘上通过指针去旋转写入,读取也是依靠磁盘指针去转动读写,
kafka的读写:是依靠顺序读写在磁盘上开辟一个空间再写入的时候是以最佳的方式去写入大大的缩短了时间。

零拷贝技术:

传统拷贝:需要我们把数据拷贝到我们的内核缓冲区(read buffer)再到我们的用户缓冲区
再从用户缓冲区发送到我们的(socket buffer),再到我们的网卡缓冲区
零拷贝:是我们的数据拷贝到内核缓冲区(read buffer)直接到我们的网卡缓冲区(零拷贝不是指我们不需要拷贝,而是我们在内核缓冲区中的没有拷贝)

2.集群

分区+索引策略

kafka中的topic中的内容可以被分为多分partition存在,每个partition又分为多个段segment,所以每次操作都是针对一小部分做操作,很轻便,并且增加并行操作的能力
### 压缩
Kafka还支持对消息集合进行压缩,Producer可以通过GZIP或Snappy格式对消息集合进行压缩
压缩的好处就是减少传输的数据量,减轻对网络传输的压力
### 页缓存技术
页缓存是操作系统实现的一种主要的磁盘缓存,以此用来减少对磁盘I/O的操作。具体来说,就是把磁盘中的数据缓存到内存中,把对磁盘的访问变为对内存的访问。为了弥补性能上的差异 ,现代操作系统越来越多地将内存作为磁盘缓存,甚至会将所有可用的内存用途磁盘缓存,这样当内存回收时也几乎没有性能损失,所有对于磁盘的读写也将经由统一的缓存。
加上零拷贝和随机读写

三、ISR

首先,ISR的全称叫做: In-Sync Replicas (同步副本集),我们可以理解为和leader保持同步的所有副本的集合。

一个分区的所有副本集合叫做AR( Assigned Repllicas )

与leader-replica未能保持同步的副本集叫做OSR( Out-Sync Relipcas )

因此我们就能得到这么一个表示:AR = ISR + OSR,翻译一下就是一个分区的副本集分为同步集合和非同步集合两部分。

那么我们可以假设一个场景,一个分区的AR集合为【0,1,2,3,4,5】,其中leader-replica是0

其中【1,2,3】作为follower和leader的数据保持同步,而【4,5】未能和leader保持同步,

那么此时,ISR=【0,1,2,3】,OSR=【4,5】

如果此时副本4追上了leader-replica,也就是和leader保持到了同步

那么此时,ISR=【0,1,2,3,4】,OSR=【5】

从上面的场景我们就可以明白,ISR动态维护了一个和leader副本保持同步副本集合,ISR中的副本全部都和leader的数据保持同步。

四、kafka的消息写入分区策略

 源代码如下可以参考

1.输入我们的指定的分区通过输入我们指定的分区把数据写入一个分区内

2.没有指定分区是哪个,但是有key值,输入的key值使用murmur2哈希算法对分区数取模,写入到对应的分区

4.既没有指定分区是哪个,也没有key值,那么我们采取的是轮询的方式选择分区,进行一个是数据的发送

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值