Kafka 入门到起飞系列 - Kafka 为什么牛? 为什么这么火?有什么优势呢?

Kafka 为什么牛? 为什么这么火?有什么优势呢?

作为面试官,聊到Kafka时,我第一个问题会问为什么选择使用Kafka呢,在技术选型时处于哪些方面的考虑呢,
这时希望听到面试者说出kakfa的优势以及与业务需求场景的契合度

1、高吞吐量:

单机情况下每秒能轻松处理几十到百万级消息并发量,集群情况下可达千万级别消息吞吐量;即使存储了TB级别的数据量,也能保持稳定的并发量、吞吐量。

2、高性能:

单节点可以连接上千客户端(生产者、消费者),并且能保证零停机、零数据丢失,在一些比较严格的场合,不能容忍数据丢失,那么Kafka可以提供保证数据零丢失这样的特性支持

零停机

零停机怎么理解呢? 比如用10台机器搭建了Kafka集群,这10台机器一年中总有几个小时宕机时间,而对于Kafka集群而言,允许机器宕机,就是说在7*24H的情况下,集群允许单个节点或若干节点宕机,不影响整个集群对外提供服务

3、持久化数据存储:

我们通常使用的DB都是关系型数据库,都是将数据持久化到磁盘中,数据的访问在对磁盘进行读写,我们都知道对磁盘进行IO比较慢,那么如何让读写速度加快呢,就产生了redis等产品,redis访问数据快是因为将数据都存储到内存去了;
对于Kafka这样的消息系统或消息中间件来说,它反其道而行之,客户端(生产者)发过来的消息, 我偏偏存到磁盘上去,存到磁盘的好处是:保证数据持久化,不至于在机器突然宕机时造成数据丢失,如果遇到最恐怖的情况,服务器被人偷走了, 磁盘也丢了,
Kafka还支持对数据进行备份,存储副本,来保证零数据丢失,除非连副本机器也偷走了,那没办法了哈哈,

那么Kafka刷盘持久化机制 怎么还能实现每秒几百万的并发这样的高性能呢?

kafka里面主要是实现了几个技术
1、零拷贝 - 涉及到用户态和内核态的转换,后面我们详细讲解
2、顺序读写 - 性能最高的磁盘就是这种顺序读写,
SSD一般四五百兆每秒,那么100M可以存储多少条消息呢,红楼梦整本转成文字才两兆多,所以单机处理百万级消息问题不大
3、利用Linux的页缓存 - 使用内核态(操作系统管理的这块内存)

4、分布式系统、易于横向扩展:

生产者、消费者、broker,都可以搭建集群,动态进行横向扩展(无需停机,热扩展就可以),横向扩展就大大提升了我们系统的处理能力

5、可靠性:

Kafka是分布式分区(一个topic数据分成不同分区放在不同服务器)、复制(分区的副本)、容错(允许服务器宕机,因为有副本可以继续对外提供服务)的

6、客户端维护状态:

消息队列实际上对每一个消息都有一个编号,通过编号来保证消息的有序性,消费者消费第几条消息由他本身来管理,
早些版本实在zk上维护offset(偏移量) ,在zk上记录这个数据就很不合适,zk每个节点能放的数据最大也就1M,zk主要是用来做服务注册与发现的一个协调服务,对高并发的一个偏移量的读写就不是它的强项, 所以后面的高版本里不在zk保存消息的偏移量了,直接在客户端保存 ,
当消息消费失败时,还能进行自动平衡,消费者rebalance很重要,后面我们重点讲

7、支持online(在线)和 offline(离线)场景

8、支持多种客户端语言

,Kafka支持常见的Java、.NET、PHP、Python、erlang等多种语言

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值