2021-11-06

分布式流平台Kafka


前言

提到Kafka很多人的第一印象就是它是一个消息系统,但Kafka发展至今,它的定位已远不止于此,而是一个分布式流处理平台。对于一个流处理平台通常具有三个关键能力:

  1. 发布和订阅消息流,在这一点上它与消息队列或企业消息系统类似
  2. 以容错的持久化方式存储消息流
  3. 在消息流产生时处理它们

一、Kafka流式数据平台

消息系统:消息系统 也叫作消息队列)主要有两种消息模型:队列和发布订
Kafka使用消费组( consumer group )统 了上面两种消息模型 Kafka使用队列模型时,它可以将处理 作平均分配给消费组中的消费者成员;使用发布订阅模式时,它可以将消息广播给多个消费组 采用多个消费组结合多个消费者,既可以线性扩展消息的处理能力,也允许消息被多个消费组订阅。
队列模式:多个消费者读取消息队列,每条消息只发送给 个消费者。
发布-订阅模式:。多个消费者订阅主题,主题的每条记录会发布给所有的消费者。
存储系统:任何消息队列要做到“发布消息”和“消费消息”的解桐合, 实际上都要扮演一个存储系统的角色,负责保存还没有被消费的消息 杏则,如果消息只是在内存中, 一旦机器宕机或进程重启,内存中的消息就会全部丢失Kafka也不例外,数据写入至UKafka集群的服务器节点时,还会复制多份来保证出现故障时仍能可用 为了保证消息的可靠存储, Kafka还允许生产者的生产请求在收到应答结果之前,阻塞式地等待 条消息,直到它完全地复制
到多个节点上,才认为这条消息写入成流处理系统将消息系统,存储系统和流处理系统组合。
在这里插入图片描述

二、使用步骤

1.分区模型

在这里插入图片描述
Kafka集群向多个消息代理服务器( broker server )组成,发布至UKafka集群的每条消息都有一个类别,用主题( topic )来表示 通常,不同应用产生不同类型的数据,可以设置不同的主题 个主题般会有多个消息的好阅者,当生产者发布消息到某个主题时,订阅了这个主题的消费者都可以接收到生产者写人的新消息。
Kafka集群为每个主题维护了分布式的分区( partition )日志文件,物理意义上可以把主题看作分区的日志文件( partitioned Jog 每个分区都是一个有序的、不可变的记录序列,新的消息会不断追到提交日志( commit log 分区中的每条消息都会按照时间顺序分配到一个单调递增的顺序编号,作偏移盘( offset ),这个偏移量能够唯 定位当前分区中的每一条消息。

2.消息模型

在这里插入图片描述

3.分布式模型

在这里插入图片描述
Kafka每个主题的多个分区日志分布式地存储在Kafka集群上,同时为了故障容错,每个分区都会以副本的方式复制到多个消息代理节点上其中一个节点会作为主副本(Leader),其节点作为备份副本(Follower,也叫作从副本)主副本会负责所有的客户端读写操作,备份副本仅仅从主副本同步数据当主副本IH现故障时,备份副本中的个副本会被选择为新的主副本因为每个分区的副本中只有主副本接受读写,所以每个服务端都会作为某些分区的主副本,以及另外一些分区的备份副本这样Kafka集群的所有服务端整体上对客户端是负载均衡的。
Kafka生产者和消费者相对于服务端而言都是客户端,生产者客户端发布消息到服务端的指定主题指定消息所属的分区生产者发布消息时根据消息是否有键采用不同的分区策略消息没有键时,通过轮询方式进行客户端负载均衡消息有键时,根据分区语义确保相同键的消息总是发送到同一个分区。
Kafka消费者通过订阅主题来消费消息并且每个消费者都会设置一个消费组名称因为生产者发布到主题的每一条消息都只会发送给消费组的一个消费者所以,如果要实现传统消息系统的“队列”模型,可以让每个消费者都拥有相同的消费组名称,这样消息就会负载均衡到所有的消费者;如果要实现“发布-订阅”模型,每个消费者的消费组名称都不相同,这样每条消息就会广播给所有的消费者。
分区是消费者线程模型的最小并行单位 ,生产者发布消息到一台服务器的个分区时 只有一个消费者消费所有的分区。我们还可以进行拆分。我们看上面的架构图。
同一个消费组下多个消费者互相协调消费工作, Kafka会将所有的分区平均地分配给所有的消费者实例,这样每个消费者都可以分配到数量均等的分区 Kafka 的消费组管理协议会动态地维护消费组的成员列表,当一个新消费者加入消费组,或者有消费者离开消费组,都会触发再平衡操作Kafka 的消费者消费消息时,只保证在一个分区内消息的完全有序性,并不保证同一个主题个分区的消息顺序 而且,消费者读取 个分区消息的顺序和生产者写入到这个分区的顺序是 致的比如,生产者写入“hello ”和“kafka ”两条消息到分区Pl ,则消费者读取到的顺序也一定是 hello和“kafka 如果业务上需要保证所有消息完全一致,只能通过设置 个分区完成,但这种做法的缺点是最多只能有 个消费者进行消费 一般来说,只需要保证每个分区的有序性,再对消息加上键来保证相同键的所有消息落入同个分区,就可以满足绝大多数的应用。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值