了解一个技术栈,我觉得需要从以下几个方面入手
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中的副本则没有机会(可以通过修改参数改变)
面试问:怎么理解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对外提供服务。
以上是本人自编。