版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、U Kafka都有哪些特点?高乔吐量、低延迟:kiiFka每秒可以处理儿十万条消息,它的延迟最低只爭 儿毫秒,每个topic可以分多个partition, consumer group对partition进行 consume 操作。可扩展性:kafkd集群支持热扩展可鼎性:消息被持久化到本地磁盘,并且支持数据备份防止数据丢持久性、容错性:咼并发:允许集群中节点失败(若副本数量为m则允许nl个节点失败) 支持数千个客户端同时读写2、请简述下你在哪些场景下会选择Kafka?日志收集:一个公司可以用Kafka 1 Solr等。消息系统:解耦和生产者和消费者、缓存消息等。用户活动跟踪:Kafk“经常被
2、用来记录web用户或者app用户的各种活动, 如浏览网页、搜索、点击等活动,这些活动信息被各个服务器发布到kafka 的topic中,然后订阅者通过订阅这些topic来做实时的监控分析,或者装载 到hadoop、数据仓库中做离线分析和挖运营指标:Kdfka也经常用来记录运营监控数据。包括收集各种分布式应用 的数据,生产各种操作的集中反馈,比如报警和报告。 流式处理;比如spark streaming和Flink3、Kafka的设计架构你知道吗? 简单架构如下详细如下KafkaI.Kafka架构分为以下儿个部分 Producer :消息生产者,就是向kafka broker发消息的客户端。 Co
3、nsumer :消息消费者,向kafka broker取消息的客户端。 Topic :可以理解为一个队列,一个Topic X分为一个或多个分区, Consumer Group:这是kafka用来实现一个topic消息的广播(发给所有的 consumer)和单播(发给任意一个consumer)的手段。一个topic可以有多 个 Consumer Group。 Broker : 一台kiifka服务器就是一个broker。一个集群Hl多个broker组成。 一个broker可以容纳多个topic。 Partition:为了实现扩展性,一个非常大的topic可以分布到多个broker _h 每个pa
4、rtition是一个有序的队列。partition中的每条消息都会被分配一个有 丿芋的id (offset) o将消息发给consumer, kafka只保证按一个partition中的 消息的顺序,不保证一个topic的整体(多个partition间)的顺序。 Offset: kafka的存储文件都是按照offset.kafka来命名,用offset做名字的 好处是方便査找。例如你想找位于2049的位置,只要找到2048.kafka的文 件即可。当然 the first offset 就是 OOOOOOOOOOO.kafkao4、Kafka分区的U的?分区对于Kafka集群的好处是:实现负载
5、均衡。分区对于消费者来说, 可以提高并发度,提高效率。5、你知道Kafka是如何做到消息的有序性?kafka中的每个partition中的消息在写入时都是有序的,而且单独一 个Partition只能由一个消费者去消费,可以在里面保证消息的顺序性。但是 分区之间的消息是不保证有序的。6、Kafka的高可鼎性是怎么实现的?数据可靠性Kafka作为一个商业级消息中间件,消息可靠性的a要性可想而知。本 文从Producter往Broker发送消息、Topic分区副本以及Leader选举 儿个角度介绍数据的可靠性。Topic分区副本在Kafka 0.&0之前,Kafka是没有副本的概念的,那时候人们只会
6、用 Kafka存储一些不重要的数据,因为没有副本,数据很可能会丢失。但是随 着业务的发展,支持副本的功能越来越强烈,所以为了保证数据的可靠性, Kafka从080版本开始引入了分区副本(详悄请参见KAFKA-50)。也就 是说每个分区可以人为的配置儿个副本(比如创建主题的时候指 定replication-factor,也可以在Broker级别进行配 置 default.replication.factor), 一般会设置为 3。Kafka可以保证单个分区里的事件是有序的,分区可以在线(可用), 也可以离线(不可用)O在众多的分区副本里面有一个副本是Leader,其余 的副本是follower,
7、所有的读写操作都是经过Leader进行的,同时follower 会定期地去leader上的复制数据。当Leader挂了的时候,其中一个follower 会重新成为新的Leadero通过分区副本,引入了数据冗余,同时也提供了 Kafka的数据可幕性。Kafka的分区多副本架构是Kafka可鼎性保证的核心,把消息写入多个 副本可以使Kafka在发生崩溃时仍能保证消息的持久性。Consumer都能读到一样的数据。假设分区的副本为3,其中副本0是Leader,副本1和副本2是 follower,并且在ISR列表里面。虽然副本0已经写入了 Messaged,但是 Consumer只能读取到Message
8、?。因为所有的ISR都同步了 Message?,只有 High Water Mark以上的消息才支持Consumer读取,而High Water Mark取7、请谈一谈Kafka数据一致性原理一致性就是说不论是老的Leader还是新 选举的Leader,决于ISR列表里面偏移量最小的分区,对应于上图的副本2,这个很类似于 木桶原理。这样做的原因是还没有被足够多副本复制的消息被认为是“不安全的, 如果Leader发生崩溃,另一个副本成为新Leader,那么这些消息很可能丢 失了。如果我们允许消费者读取这些消息,可能就会破坏一致性。试想,一 个消费者从当前Leader (副本0)读取并处理了 Me
9、ssaged这个时候 Leader挂掉了,选举了副本1为新的Leader,这时候另一个消费者再去从新 的Leader读取消息,发现这个消息其实并不存在,这就导致了数据不一致性 问题。当然,引入了 High Water Mark机制,会导致Broker间的消息复制因为 某些原因变慢,那么消息到达消费者的时间也会随之变长(因为我们会先等 待消息复制完毕)。延迟时间可以通过参数replica.lag.timejnax.ins参数配 置,它指定了副本在复制消息时可被允许的最大延迟时间。8、ISR、OSR、AR 是什么?ISR: In-Sync Replicas 副本同步队列OSR: Out-of-Sy
10、nc Replicas AR: Assigned Replicas 所有副本ISR是ill leader维护,follower从leader同步数据有一些延迟(具体可以参 见图文了解Kafka的副本复制机制),超过相应的阈值会把follower剔除出 ISR、存入 OSR (Out-of-Sync Replicas )列表,新加入的 follower 也会先存 放在 OSR 中。AR=ISR+OSR。9、LEO、HW、LSO、LW等分别代表什么 LEO:是LogEndOffset的简称,代表当前日志文件中下一条 HW:水位或水印(watermark) 词,也可称为高水位(high waterm
11、ark)通 常被用在流式处理领域(比如Apache Fiink、Apache Spark等),以表征元 素或事件在基于时间层面上的进度。在Kdfkci中,水位的概念反而与时间无 关,而是与位置信息相关。严格来说,它表示的就是位置信息,即位移(offset) O 取 Partition 对应的 ISR 中 最小的 LEO 作为 HW, consumer 最 多只能消费到HW所在的位置上一条信息。 LSO:是LastStabieOffset的简称,对未完成的事务而言,LSO的值等于事 务中第一条消息的位置(firstUnstableOffset),对已完成的事务而言,它的值 同HW相同 LW: L
12、ow Watermark低水位,代表AR集合中最小的logStartOffset值。10、Kafka在什么悄况下会出现消息丢失?11、怎么尽可能保证Kafka的可靠性12、消费者和消费者组有什么关系? 每个消费者从属于消费组。具体关系如下:13、Kafka的每个分区只能被一个消费者线程,如何做到多个线程同时消费 一个分区?14、数据传输的事务有儿种?数据传输的事务定义通常有以下三种级别:传输(2) 输.(3)(1)最多一次:消息不会被重复发送,最多被传输一次,但也有可能一次不最少一次:消息不会被漏发送,最少被传输一次,但也有可能被巫复传 精确的一次(Exactly once):不会漏传输也不会
13、重复传输每个消息都传输被15、Kafka消费者是否可以消费指定分区消息?Kafa consumer消费消息时,向broker发出fetch请求去消费特定分区的 消息,consumer指定消息在日志中的偏移量(offset),就可以消费从这个 位置开始的消息,customer拥有了 offset的控制权,可以向后回滚去重新消 费之前的消息,这是很有意义的。16、Kdfkd消息是采用Pull模式,还是Push模式?Kafkd最初考虑的问题是,customer应该从brokes拉取消息还是brokers 将消息推送到consumer,也就是puH还push。在这方面,Kcifka遵循了一种 大部分消
14、息系统共同的传统的设计:producer将消息推送到broker, consumer从broker拉取消息oconsumer O一些消息系统比如Scribe和Apache Flume采用了 push模式,将消息推 送到下游的consumerO这样做有好处也有坏处:山broker决定消息推送的速 率,对于不同消费速率的consumer就不太好处理了。消息系统都致力于让 consumer以最大的速率最快速的消费消息,但不幸的是,push模式下,当 broker推送的速率远大于consumer消费的速率时,consumer恐怕就要崩溃 了。最终KMka还是选取了传统的pull模式。Pull模式的另外
15、一个好处是 consumer可以自主决定是否批量的从broker拉取数据。Push模式必须在不 知道下游consumer消费能力和消费策略的悄况下决定是立即推送每条消息还 是缓存之后批量推送。如果为了避免consumer崩溃而釆用较低的推送速率, 将可能导致一次只推送较少的消息而造成浪费。Pl山模式下,consumer就可 以根据自己的消费能力去决定这些策略。Pull有个缺点是,如果broker没有 可供消费的消息,将导致consumer不断在循环中轮询,直到新消息到t达。 为了避免这点,Kafk“有个参数可以让consumer阻塞知道新消息到达(当然 也可以阻塞知道消息的数量达到某个特定的量
16、这样就可以批量发17、Kafka消息格式的演变清楚吗?18、Kafka偏移量的演变清楚吗?19、Kafka面效文件存储设计特点 Kafka把topic中一个parition大文件分成多个小文件段,通过多个小文件段, 就容易定期清除或删除已经消费完文件,减少磁盘占用。通过索引信息可以快速定位message和确定response的最大大小。通过index元数据全部映射到memory,可以避免segment file的IO磁盘操 作。通过索引文件稀疏存储,可以大幅降低index文件元数据占用空间大小20、Kafka创建Topic时如何将分区放置到不同的Broker中副本因子不能大于Broker的个数
17、;第一个分区(编号为0)的第一个副本放置位置是随机从brokerList选择的;其他分区的第一个副本放置位置相对于第0个分区依次往后移。也就是如果 我们有5个Broker, 5个分区,假设第一个分区放在笫四个Broker那么第二个分区将会放在第五个Broker上;第三个分区将会放在第一个Broker 上;第四个分区将会放在第二个Broker上,依次类推;剩余的副本相对于第一个副本放置位置其实是山nextRepIicaShift决定的, 而这个数也是随机产生的21、Kafkd新建的分区会在哪个U录下创建在启动Kafk集群之询,我们需要配置好log.dirs参数,其值是Kafka 数据的存放U录,
18、这个参数可以配置多个U录,U录之间使用逗号分隔,通 常这些U录是分布在不同的磁盘上用于提高读写性能。当然我们也可以配置log.dir参数,含义一样。只需要设置其中一个即可。如果log.dirs参数只配置了一个U录,那么分配到各个Broker 的分区 肯定只能在这个U录下创建文件夹用于存放数据。但是如果log.dirs参数配置了多个U录,那么Kcifkn会在哪个文件夹中 创建分区14录呢?答案是:Kafka会在含有分区U录最少的文件夹中创建新 的分区U录,分区U录名为Topic名+分区ID。注意,是分区文件夹总数最 少的U录,而不是磁盘使用量最少的tl录!也就是说,如果你给log.dirs参 数
19、新增了一个新的磁盘,新的分区U录肯定是先在这个新的磁盘上创建直到 这个新的磁盘目录拥有的分区U录不是最少为止。22、谈一谈Kafka的再均衡在Kafka中,当有新消费者加入或者订阅的topic数发生变化时,会触 发Rebalance(再均衡:在同一个消费者组当中,分区的所有权从一个消费者 转移到另外一个消费者)机制,Rebalance顾名思义就是重新均衡消费者消费。 Rebalance的过程如下:第一步:所有成员都向coordinator发送请求,请求入组。一旦所有成员 都发送了请求,coordinator会从中选择一个consumer担任leader的角色 并把组成员信息以及订阅信息发给le
20、ader。第二步:leader 始分配消费方案,指明具体哪个consumer负责消费哪 些topic的哪些partition。一旦完成分配leader会将这个方案发给 coordinatofo coordinator接收到分配方案之后会把方案发给各个consumer, 这样组内的所有成员就都知道自己应该消费哪些分区了。所以对于 Rebalance来说,Coordinator起着至关重要的作用谈谈Kdfka分区分配策略24、Kafka Producer是如何动态感知主题分区数变化的?25、Kafka是如何实现面呑吐率的?Kafka是分布式消息系统,需要处理海量的消息,Kafka的设计是把所有 的消息都写入速度低容量大的硬盘,以此来换取更强的存储能力,但实际上, 使用硬盘并没有带来过多的性能损失。kafka 要使用了以下儿个方式实现 了超高的祚吐率:顺序读写;零拷贝文件分段批量发送27、数据压缩。如何为Kafka集群选择合
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论