32道常见的Kafka面试题及答案

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1、K afka都有哪些特点?

・高呑吐量、低延迟:kafka每秒可以处理儿十万条消息,它的延迟最低只声儿毫秒,每个topic可以分多个Partition, COnSIImer group对PartitiOn进行

COnSUme 操作。

•可扩展性:kafka集群支持热扩展

•持久性、可幕性:消息被持久化到本地磁盘,并且支持数据备份防止数据丢

•容错性:允许集群中节点失败(若副本数量为n,则允许n-1个节点失败)

•高并发:支持数千个客户端同时读写

2、请简述下你在哪些场景下会选择Kafka?

•日志收集:一个公司可以用Kafka可以收集各种服务的log,通过kafka以统一接口服务的方式开放给各种COnSUmer,例如hadoop> HBaSe> SOIr等。

•消息系统:解耦和生产者和消费者、缓存消息等。

•用户活动跟踪:Kafka经常被用来记录Web用户或者app用户的各种活动,如浏览网页、搜索、点击等活动,这些活动信息被各个服务器发布到kafka 的topic 中,然后订阅者通过订阅这些topic来做实时的监控分析,或者装载到hadoop>数据仓库中做离线分析和挖掃。

•运营指标:KJfka也经常用来记录运营监控数据。包括收集各种分布式应用的数据,生产各种操作的集中反馈,比如报警和报告。

• 流式处理:比如SPark Streaming和FIink

3、Kafka的设计架构你知道吗?简单架构如下

Kafka 架构分为以下儿个部分

• PrOdUCer :消息生产者,就是向kafka broker 发消息的客户端。 • COnSUmer :消息消费者,向kafka broker 取消息的客户端。 • TOPiC :可以理解为一个队列,一个TOPiC 又分为一个或多个分区, • COnSUmer Group :这是kafka 用来实现一个topic 消息的广播(发给所有的 COnSUmer )和单播(发给任意一个COnSUmer )的手段。一个topic 可以有多 个 COnSUmer GrOUPo

• BrOker :—台kafka 服务器就是一个broker t > 一个集群由多个broker 组成。 一个broker 可以容纳多个topic o

• Partition :为了实现扩展性,一个非常大的topic 可以分布到多个broker 上, 每个PartitiOn 是一个有序的队列。PartitiOn 中的每条消息都会被分配一个有 序的id (OffSet ) o 将消息发给COnSUmer, kafka 只保证按一个PartitiOn 中的 消息的顺序,不保证一个topic 的整体(多个PartitiOn 间)的顺序。 ・OffSg kafka 的存储文件都是按照Offset.kafka 来命名,用OffSet 做名字的 好处是方便查找。例如你想找位于2049的位置,只要找到2048.kafka 的文 件即可。当然 the first OffSet 就是 OOOOOOOOOOO.kafkao

K ㈱架构 KafkaJWli 鵰 BrOke rI

TOPiCA TOPiCA r Paftition PartitiOn

I Leader

Follows Consum 堺8野寵 ! ConSUnlergr ProdUC

ZoOkee ^f

message

to A-I COnSUme

message

to B ∙0

Partib RrOAIC COnSUme

messa

ge froπ

ZOoke eper .≡iSS

TOPiC

A

Parti message ! to A-Γt J

∣Γ RePIiCat)OnAι,0 RePlCatio

4、Kafka分区的目的?

分区对于Kafka集群的好处是:实现负载均衡。分区对于消费者来说,可以提高并发度,提高效率。

5、你知道Kafka是如何做到消息的有序性?

kafka中的每个PartitiOn中的消息在写入时都是有序的,而且单独一个PartitiOn只能由一个消费者去消费,可以在里面保证消息的顺序性。但是分区之间的消息是不保证有序的。

6、Kafka的高可幕性是怎么实现的?数据可靠性

Kafka作为一个商业级消息中间件,消息可靠性的重要性可想而知。本文从PrOdUCter往BrOker发送消息、TOPiC分区副本以及Leader选举儿个角度介绍数据的可靠性。

TOPiC分区副本

在KafkaO.8.0之前,Kafka是没有副本的概念的,那时候人们只会用Kafka 存储一些不重要的数据,因为没有副本,数据很可能会丢失。但是随着业务的发展,支持副本的功能越来越强烈,所以为了保证数据的可靠性,Kafka从

0.8.0版本开始引入了分区副本(详情请参见KAFKA-50)。也就是说每个分区可

以人为的配置儿个副本(比如创建主题的时候指定replication-factor,也可以在BrOker级别进行配置default.replication.factor), 一般会设置为3。

Kafka可以保证单个分区里的事件是有序的,分区可以在线(可用),也可以离线(不可用)。在众多的分区副本里面有一个副本是Leader,其余的副本是follower,所有的读写操作都是经过Leader进行的,同时follower 会定期地去Ieader上的复制数据。当Leader挂了的时候,其中一个follower 会重新成为新的LeaderO通过分区副本,引入了数据冗余,同时也提供了Kafka的数据可鼎性。

Kafka的分区多副本架构是Kafka可壽性保证的核心,把消息写入多个副本可以使Kafka在发生崩溃时仍能保证消息的持久性。

7、请谈一谈Kafka数据一致性原理一致性就是说不论是老的Leader还是新选举

的Leader, COnSUmer都能读到一样的数据。

假设分区的副本为3,其中副本0是Leader,副本1和副本2是follower,并且在ISR列表里面。虽然副本0已经写入了MeSSage4,但是COnSUmer只能读取到MeSSage2o因为所有的ISR都同步了MeSSage2,只有High Water Mark以上的消息才支持COnSUmer读取,而High Water Mark取

决于ISR列表里面偏移量最小的分区,对应于上图的副本2,这个很类似于木桶原理。

相关文档
最新文档