架构师面试题系列之Kafka面试专题及答案(26题).docx
"架构师面试题系列之Kafka面试专题及答案" Kafka 是一种高吞吐量、分布式、基于发布/订阅的消息系统,最初由 LinkedIn 公司开发,使用 Scala 语言编写,目前是 Apache 的开源项目。broker 是 Kafka 服务器,负责消息存储和转发。topic 是消息类别,Kafka 按照 topic 来分类消息。partition 是 topic 的分区,一个 topic 可以包含多个 partition,topic 消息保存在各个 partition 上。offset 是消息在日志中的位置,可以理解是消息在 partition 上的偏移量,也是代表该消息的唯一序号。 Producer 是消息生产者,Consumer 是消息消费者,Consumer Group 是消费者分组,每个 Consumer 必须属于一个 group。Zookeeper 保存着集群 broker、topic、partition 等元数据;另外,还负责 broker 故障发现、partition leader 选举、负载均衡等功能。 Kafka 的设计是将消息以 topic 为单位进行归纳,将向 Kafka topic 发布消息的程序成为 producers,将预订 topics 并消费消息的程序成为 consumer。Kafka 以集群的方式运行,可以由一个或多个服务组成,每个服务叫做一个 broker。producers 通过网络将消息发送到 Kafka 集群,集群向消费者提供消息。 使用 Kafka 的原因是缓冲和削峰、解耦和扩展性、冗余、健壮性、异步通信等。缓冲和削峰是指上游数据时有突发流量,下游可能扛不住,或者下游没有足够多的机器来保证冗余,Kafka 在中间可以起到一个缓冲的作用,把消息暂存在 Kafka 中,下游服务就可以按照自己的节奏进行慢慢处理。解耦和扩展性是指项目开始的时候,并不能确定具体需求。消息队列可以作为一个接口层,解耦重要的业务流程。冗余是指可以采用一对多的方式,一个生产者发布消息,可以被多个订阅 topic 的服务消费到,供多个毫无关联的业务使用。健壮性是指消息队列可以堆积请求,所以消费端业务即使短时间死掉,也不会影响主要业务的正常进行。异步通信是指很多时候,用户不想也不需要立即处理消息。消息队列提供了异步处理机制,允许用户把一个消息放入队列,但并不立即处理它。 数据传输的事务定义通常有三种级别:最多一次、最少一次、精确的一次。最多一次是指消息不会被重复发送,最多被传输一次,但也有可能一次不传输。最少一次是指消息不会被漏发送,最少被传输一次,但也有可能被重复传输。精确的一次是指不会漏传输也不会重复传输, 每个消息都传输被一次而且仅仅被传输一次,这是大家所期望的。 Kafka 判断一个节点是否还活着有两个条件:节点必须可以维护和 ZooKeeper 的连接, Zookeeper 通过心跳机制检查每个节点的连接;如果节点是个 follower,他必须能及时的同步 leader 的写操作,延时不能太久。 ISR 代表 In-Sync Replicas,AR 代表 Assigned Replicas。ISR 是由 leader 维护,follower 从 leader 同步数据有一些延迟,当任意一个超过阈值都会把 follower 剔除出 ISR,存入 OSR(Out-of-Sync Replicas)列表,新加入的 follower 也会先存放在 OSR 中。AR=ISR+OSR。 broker 是消息的代理,Producers 往 Brokers 里面的指定 Topic 中写消息,Consumers 从 Brokers 里面拉取指定 Topic 的消息,然后进行业务处理,broker 在中间起到一个代理保存消息的中转站。producer 是否直接将数据发送到 broker 的 leader?答案是 yes,producer 直接将数据发送到 broker 的 leader,不需要在多个节点进行分发,为了帮助 producer 做到这点,所有的 Kafka 节点都可以及时的告知:哪些节点是活动的。
剩余7页未读,继续阅读
- 粉丝: 0
- 资源: 21
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助