kafka 原理解析

了解一个技术栈,我觉得需要从以下几个方面入手

a.是什么

b.为什么用这个技术栈(用这个技术栈有什么优缺点)

c.有什么别的可以替代(大概了解)

d.经常出现的问题有哪些(可能用了才知道)

1、Kafka 是什么

               kafka 是采用Scala(没看过)语言开发的一个多分区,多副本且基于Zookeeper协调的分布式消息系统。

        (问kafka可以脱离Zookeeper单独使用吗?官方在2.8版本之后会逐步去除kafka对Zookeeper的依赖。但是查询资料没有找到脱离zk的使用证明!)

    特点:1.高吞吐量

                        kafka每秒可以产生25万条消息(50MB),每秒处理55万条消息(110MB)

               2.可持久化

                        

               3.可水平开展

                        

               4.支持数据流处理

               ……等

 组成部分:

        (1)Producer:生产者,就是发送消息的一方,生产者负责创建消息,推送到Kafka中;

        (2)Consumer:消费者,也就是接收消息

的一方,消费者链接到Kafka并且接受消息。然后处理接下来的业务逻辑。

                                       消费者也有一定的容灾能力,Consumer是采用获取(pull)的方式来消费消息的。同时会保存消费的具体位置。当服务器宕机恢复可以根据记录的位置继续消费,这样就不会造成消息丢失。

        (3)Broker:服务器代理节点,Broker可以看做是一个独立的kafka服务节点或者是kafka实例

Kafka中还有两个概念(重要):

        (1)主题(Topic)kafka中的消息以主题为单位进行归类,生产者将消息发送到特定的主题(生产者发送的每条消息必须指定一个主题)消费者负责订阅主题消费----是一个逻辑上的概念

        (2)分区(Partition)分区如图所示。一个主题可以包含多个分区,但是一个分区只能对应一个主题。分区在储存层面可以看作可追加日志的log文件。消息被追加到分区日志文件的时候会分配一个特定的偏移量(offset),offset是消息在分区中的唯一标识,可以保证消息在kafka中的顺序性。也就是说分区是有序的,那么主题是否有序就要看怎么分区了。

                kafka为分区引入了多副本(Replica)的机制,通过增加副本来提高容灾能力。同一分区不同副本保存的是相同的信息(在同一时刻,副本之间并非完全一样),副本之间是一主多从的关系,其中leader副本负责读写请求,follower副本只负责同步leader副本消息。副本存在不同个broker(kafka实例)中,当leader副本出现故障时,会从follower中选举出新的副本作为leader副本对外提供服务。这样kafka实现了故障自动转移,即使有某个kafka实例(broker)出现故障,也可以保证服务的可用性。

:broker是实例,和分区时两个概念,切记不要搞混。可以把broker看做一个盒子,然后副本是盒子中的容器,相同的副本可以分布在不同的broker实例中 这样就可以解释某个broker出现故障,kafka也可以正常提供服务了)

                

 那么同一分区下的副本 同步数据的过程及原理是什么呢?请往下看

        分区中统称副本为AR,分区中与leader副本消息一定程度上同步(注:一定程度是指可接受滞后范围内,可以通过参数配置)的副本为ISR (包括leader在内)。在消息同步期间内follower副本相对leader副本有一定程度的滞后,滞后过多的follower的副本为OSR,由此可见 这种情况下AR = ISR+OSR ,也就是说理想状态下的 AR = ISR, OSR集合为空;所以当leader发生故障时,只有ISR集合中的follower副本可以被选举为leader副本;而在OSR中的副本则没有机会(可以通过修改参数改变)

为了让读者更好地理解 ISR 集合, 以及 HW LEO 之间的 关系, 下面通过 个简单的示 例来进行相关的说明 如图 1-5 所示,假设某个分区的 ISR 集合中有 个副本,即一个 leader 副本和 fo llower 副本,此时分区的 LEO HW 都为 消息 和消息 从生产者发出之后会被先存入 leader 本,如图 所示

在消息写入 leader 副本之后, fo llower 副本会发送拉取请求来拉取消息 和消息 以进行消息同步。在同步过程中,不同的 fo llow 副本的同步效率也不尽相同。如图 1-7 所示, 在某一时刻
follower! 完全跟上了 leader 副本而 follower2 只同 步了消息 ,如此 leader 副本的 LEO 5,follower! LEO , follower2 LEO 那么当前分区的 HW 小值 ,此时消费者可以消 offset 之间的 消息。

写入消息(情形的如图 1- ,所有的副本都成功 写入 了消息 和消息 ,整个分区的HW LEO 都变为 ,因此消费 可以消费到 offset 的消息了
由此可见只有在ISR中的副本都复制完成之后,消息才对消费者可见。不是单纯的所有副本都复制完才算是消息提交完,否则会大大影响性能。也不是单纯异步复制,也就是leader提交完成就算消息提交,如果没有来得及复制,leader出现了故障,就会导致消息的丢失。而用ISR的方式有效的平衡了服务器的性能和可靠性。

面试问:怎么理解kafka?

        好的,面试官,kafka是Scala语言开发的,多分区,多副本,基于zookeeper协调的分布式消息系统,

它的优点:1 高吞吐量,2 可持久化,3 可水平扩展,4 支持数据流处理等。

kafka 主要有三部分组成

       1 producer :生产者,负责消息创建,并且把消息推送到kafka

        2 Consumer :消费者,负责订阅消息,用拉取的方式消费消息,每消费一个消息就会记录消息的位置信息,如果kafka宕机重启,可以查询位置继续消费消息,也就避免了消息丢失

        3 broker 服务器代理节点,一个broker可以看作一个kafka实例或者是独立的kafka服务器节点

kafka 还有两个概念 主题 和分区

        主题:kafka 的消息是以主题为单位进行分类的,生产者在创建消息的时候,必须给消息定义一个主题,消费者通过订阅主题来消费消息。

        分区:一个主题可以对应多个分区,但是一个分区只能对应一个主题。分区根据存储层面可以看作是可追加日志的log文件。每增加一条消息,会定义何以偏移量offset,offset是消息在分区中的唯一标识,保证了消息在分区中的顺序性

kafka还有一种多副本的机制。

        在一个分区内可以设置多个副本。副本之间是一主多从的关系,主副本负责对外提供读写服务,从副本负责同步主副本的消息。如果有主副本出现故障,那么kafka就会在从副本中选举出一个作为主副本对外提供服务。这样启动多个broker 即使其中一个出现故障,也不影响kafka对外提供服务。

以上是本人自编。

  • 9
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不求人€

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值