ITPub博客

首页 > 数据库 > 数据库开发技术 > 一文读懂消息队列中间件Kafka到底是什么

一文读懂消息队列中间件Kafka到底是什么

原创 数据库开发技术 作者:步步运维步步坑 时间:2023-10-11 11:00:00 0 删除 编辑

kafka 是apache下面的子项目,是一个高性能跨语言分布式订阅发布消息队列系统

消息队列就像是一个容器,当我们需要使用消息的时候可以取出来供自己使用。消息队列的存在主要是为了通过异步处理提高系统性能和削峰(使用消息中间件采用队列的形式可以减少突发访问压力,不会因为突发的超时负荷要求而崩溃),降低系统耦合性(程序模块间存在联系的紧密程度)


kafka集群的包含一个或者多个服务器,服务器节点叫做broker,每一条发布到kafka集群的消息都有类别,这个类别叫做Topic,类似与数据库表名,topic上面的数据分割为一个或者多个partition每一个partition数据使用多个segment文件存储,每个partition 有多个副本,但是只有一个为leader,便是负责数据读写的partition

leader的跟随者叫做follower,所有写的请求都要通过follower路由,数据变更会广播给所有follower,follower的数据保持和leader同步,leader失效则从新的follower中选择新的leader,当follower挂掉,卡住,或者同步太慢,leader 会将这个follower删除(in sync replicas  ISR中移除),重新创建一个follower

生产者(数据发布者)将消息发布到kafka的topic中,broker接受到消息后,将该消息追加到当前追加数据的segmengt文件中,生产者可以指定存储数据的partition

消费者(consumer)可以从broker读取数据,消费者可以提取多个topic,每一个消费者属于一个特定的consumer group  可以指定,如果不指定,则为默认。

通讯过程:

         客户端打开与服务器端的socker,往socker写入int32的数字(数字表示这次发送的Request有多少字节),服务端接受到请求,读取int32数字整数,从而得到request的大小,然后读取对应字节 的数据从而得到request的内容,服务器收到内容后,以同样的方式对客户端做出响应。

数据传输的事务定义:                   

1、at most once :最多一次.发送一次,无论成败,将不会重发。

at most once:消费者fetch消息,然后保存offset,然后处理消息;当client保存offset之后,但是在消息处理过程中出现了异常,导致部分消息未能继续处理.那么此后”未处理”的消息将不能被fetch到,这就是“atmost once”。

2、at least once:消息至少发送一次,如果消息未能接受成功,可能会重发,直到接收成功。

at least once:消费者fetch消息,然后处理消息,然后保存offset.如果消息处理成功之后,但是在保存offset阶段zookeeper异常导致保存操作未能执行成功,这就导致接下来再次fetch时可能获得上次已经处理过的消息,这就是“atleast once”,原因offset没有及时的提交给zookeeper,zookeeper恢复正常还是之前offset状态。

3、exactly once:消息只会发送一次。

exactly once: kafka中并没有严格的去实现(基于2阶段提交,事务),我们认为这种策略在kafka中是没有必要的。

注:通常情况下“at-least-once”是我们首选。(相比at most once而言,重复接收数据总比丢失数据要好

Kafka的优点:

  • 高吞吐量、低延迟:kafka每秒可以处理几十万条消息,它的延迟最低只有几毫秒,每个topic可以分多个partition, consumer group 对partition进行consume操作。可扩展性:kafka集群支持热扩展持久性、可靠性:消息被持久化到本地磁盘,并且支持数据备份防止数据丢失容错性:允许集群中节点失败(若副本数量为n,则允许n-1个节点失败)高并发:支持数千个客户端同时读写


原文作者:步步运维步步坑;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论

注册时间:2022-10-08

  • 博文量
    100
  • 访问量
    51716