kafka面试题_kafka面试题及答案 - CSDN
精华内容
参与话题
  • 14个最常见的Kafka面试题及答案

    万次阅读 2017-08-25 11:16:09
    1、请说明什么是Apache Kafka?  Apache Kafka是由Apache开发的一种发布订阅消息系统,它是一个分布式的、分区的和重复的日志服务。  2、请说明什么是传统的消息传递方法?  传统的消息传递方法包括两种:...

    1、请说明什么是Apache Kafka?

      Apache Kafka是由Apache开发的一种发布订阅消息系统,它是一个分布式的、分区的和重复的日志服务。

      2、请说明什么是传统的消息传递方法?

      传统的消息传递方法包括两种:

      ·排队:在队列中,一组用户可以从服务器中读取消息,每条消息都发送给其中一个人。

      ·发布-订阅:在这个模型中,消息被广播给所有的用户。

      3、请说明Kafka相对传统技术有什么优势?

      Apache Kafka与传统的消息传递技术相比优势之处在于:

      快速:单一的Kafka代理可以处理成千上万的客户端,每秒处理数兆字节的读写操作。

      可伸缩:在一组机器上对数据进行分区和简化,以支持更大的数据

      持久:消息是持久性的,并在集群中进行复制,以防止数据丢失。

      设计:它提供了容错保证和持久性

      4、在Kafka中broker的意义是什么?

      在Kafka集群中,broker术语用于引用服务器

      5、Kafka服务器能接收到的最大信息是多少?

      Kafka服务器可以接收到的消息的最大大小是1000000字节。

      6、解释Kafka的Zookeeper是什么?我们可以在没有Zookeeper的情况下使用Kafka吗?

      Zookeeper是一个开放源码的、高性能的协调服务,它用于Kafka的分布式应用。

      不,不可能越过Zookeeper,直接联系Kafka broker。一旦Zookeeper停止工作,它就不能服务客户端请求。

      ·Zookeeper主要用于在集群中不同节点之间进行通信

      ·在Kafka中,它被用于提交偏移量,因此如果节点在任何情况下都失败了,它都可以从之前提交的偏移量中获取

      ·除此之外,它还执行其他活动,如: leader检测、分布式同步、配置管理、识别新节点何时离开或连接、集群、节点实时状态等等。

      7、解释Kafka的用户如何消费信息?

      在Kafka中传递消息是通过使用sendfile API完成的。它支持将字节从套接口转移到磁盘,通过内核空间保存副本,并在内核用户之间调用内核。

      8、解释如何提高远程用户的吞吐量?

      如果用户位于与broker不同的数据中心,则可能需要调优套接口缓冲区大小,以对长网络延迟进行摊销。

      9、解释一下,在数据制作过程中,你如何能从Kafka得到准确的信息?

      在数据中,为了精确地获得Kafka的消息,你必须遵循两件事: 在数据消耗期间避免重复,在数据生产过程中避免重复。

      这里有两种方法,可以在数据生成时准确地获得一个语义:

      ·每个分区使用一个单独的写入器,每当你发现一个网络错误,检查该分区中的最后一条消息,以查看您的最后一次写入是否成功

      ·在消息中包含一个主键(UUID或其他),并在用户中进行反复制

      10、解释如何减少ISR中的扰动?broker什么时候离开ISR?

      ISR是一组与leaders完全同步的消息副本,也就是说ISR中包含了所有提交的消息。ISR应该总是包含所有的副本,直到出现真正的故障。如果一个副本从leader中脱离出来,将会从ISR中删除。

      11、Kafka为什么需要复制?

      Kafka的信息复制确保了任何已发布的消息不会丢失,并且可以在机器错误、程序错误或更常见些的软件升级中使用。

      12、如果副本在ISR中停留了很长时间表明什么?

      如果一个副本在ISR中保留了很长一段时间,那么它就表明,跟踪器无法像在leader收集数据那样快速地获取数据。

      13、请说明如果首选的副本不在ISR中会发生什么?

      如果首选的副本不在ISR中,控制器将无法将leadership转移到首选的副本。

      14、有可能在生产后发生消息偏移吗?

      在大多数队列系统中,作为生产者的类无法做到这一点,它的作用是触发并忘记消息。broker将完成剩下的工作,比如使用id进行适当的元数据处理、偏移量等。

      作为消息的用户,你可以从Kafka broker中获得补偿。如果你注视SimpleConsumer类,你会注意到它会获取包括偏移量作为列表的MultiFetchResponse对象。此外,当你对Kafka消息进行迭代时,你会拥有包括偏移量和消息发送的MessageAndOffset对象。

    展开全文
  • Kafka面试题与答案全套整理

    千次阅读 2019-10-01 18:00:45
    转载自Kafka面试题与答案全套整理 1. Kafka的用途有哪些?使用场景如何? 总结下来就几个字:异步处理、日常系统解耦、削峰、提速、广播 如果再说具体一点例如:消息,网站活动追踪,监测指标,日志聚合,流处理,事件...

    转载自 Kafka面试题与答案全套整理

    1. Kafka的用途有哪些?使用场景如何?
    总结下来就几个字:异步处理、日常系统解耦、削峰、提速、广播

    如果再说具体一点例如:消息,网站活动追踪,监测指标,日志聚合,流处理,事件采集,提交日志等

    2. Kafka中的ISR、AR又代表什么?ISR的伸缩又指什么
    ISR:In-Sync Replicas 副本同步队列

    AR:Assigned Replicas 所有副本

    ISR是由leader维护,follower从leader同步数据有一些延迟(包括延迟时间replica.lag.time.max.ms和延迟条数replica.lag.max.messages两个维度, 当前最新的版本0.10.x中只支持replica.lag.time.max.ms这个维度),任意一个超过阈值都会把follower剔除出ISR, 存入OSR(Outof-Sync Replicas)列表,新加入的follower也会先存放在OSR中。AR=ISR+OSR。

    3. Kafka中的HW、LEO、LSO、LW等分别代表什么?
    HW:High Watermark 高水位,取一个partition对应的ISR中最小的LEO作为HW,consumer最多只能消费到HW所在的位置上一条信息。

    LEO:LogEndOffset 当前日志文件中下一条待写信息的offset

    HW/LEO这两个都是指最后一条的下一条的位置而不是指最后一条的位置。

    LSO:Last Stable Offset 对未完成的事务而言,LSO 的值等于事务中第一条消息的位置(firstUnstableOffset),对已完成的事务而言,它的值同 HW 相同

    LW:Low Watermark 低水位, 代表 AR 集合中最小的 logStartOffset 值

    4. Kafka中是怎么体现消息顺序性的?
    kafka每个partition中的消息在写入时都是有序的,消费时,每个partition只能被每一个group中的一个消费者消费,保证了消费时也是有序的。
    整个topic不保证有序。如果为了保证topic整个有序,那么将partition调整为1.

    5. Kafka中的分区器、序列化器、拦截器是否了解?它们之间的处理顺序是什么?
    拦截器->序列化器->分区器

    6. Kafka生产者客户端的整体结构是什么样子的?
    7. Kafka生产者客户端中使用了几个线程来处理?分别是什么?
    2个,主线程和Sender线程。主线程负责创建消息,然后通过分区器、序列化器、拦截器作用之后缓存到累加器RecordAccumulator中。Sender线程负责将RecordAccumulator中消息发送到kafka中.

    9. Kafka的旧版Scala的消费者客户端的设计有什么缺陷?
    10. “消费组中的消费者个数如果超过topic的分区,那么就会有消费者消费不到数据”这句话是否正确?如果不正确,那么有没有什么hack的手段?
    不正确,通过自定义分区分配策略,可以将一个consumer指定消费所有partition。

    11. 消费者提交消费位移时提交的是当前消费到的最新消息的offset还是offset+1?
    offset+1

    12. 有哪些情形会造成重复消费?
    消费者消费后没有commit offset(程序崩溃/强行kill/消费耗时/自动提交偏移情况下unscrible)

    13. 那些情景下会造成消息漏消费?
    消费者没有处理完消息 提交offset(自动提交偏移 未处理情况下程序异常结束)

    14. KafkaConsumer是非线程安全的,那么怎么样实现多线程消费?
    1.在每个线程中新建一个KafkaConsumer

    2.单线程创建KafkaConsumer,多个处理线程处理消息(难点在于是否要考虑消息顺序性,offset的提交方式)

    15. 简述消费者与消费组之间的关系
    消费者从属与消费组,消费偏移以消费组为单位。每个消费组可以独立消费主题的所有数据,同一消费组内消费者共同消费主题数据,每个分区只能被同一消费组内一个消费者消费。

    16. 当你使用kafka-topics.sh创建(删除)了一个topic之后,Kafka背后会执行什么逻辑?
    创建:在zk上/brokers/topics/下节点 kafkabroker会监听节点变化创建主题
    删除:调用脚本删除topic会在zk上将topic设置待删除标志,kafka后台有定时的线程会扫描所有需要删除的topic进行删除

    17. topic的分区数可不可以增加?如果可以怎么增加?如果不可以,那又是为什么?
    可以

    18. topic的分区数可不可以减少?如果可以怎么减少?如果不可以,那又是为什么?
    不可以

    19. 创建topic时如何选择合适的分区数?
    根据集群的机器数量和需要的吞吐量来决定适合的分区数

    20. Kafka目前有那些内部topic,它们都有什么特征?各自的作用又是什么?
    __consumer_offsets 以下划线开头,保存消费组的偏移

    21. 优先副本是什么?它有什么特殊的作用?
    优先副本 会是默认的leader副本 发生leader变化时重选举会优先选择优先副本作为leader

    22. Kafka有哪几处地方有分区分配的概念?简述大致的过程及原理
    创建主题时
    如果不手动指定分配方式 有两种分配方式

    消费组内分配

    23. 简述Kafka的日志目录结构
    每个partition一个文件夹,包含四类文件.index .log .timeindex leader-epoch-checkpoint
    .index .log .timeindex 三个文件成对出现 前缀为上一个segment的最后一个消息的偏移 log文件中保存了所有的消息 index文件中保存了稀疏的相对偏移的索引 timeindex保存的则是时间索引
    leader-epoch-checkpoint中保存了每一任leader开始写入消息时的offset 会定时更新
    follower被选为leader时会根据这个确定哪些消息可用

    24. Kafka中有那些索引文件?
    如上

    25. 如果我指定了一个offset,Kafka怎么查找到对应的消息?
    1.通过文件名前缀数字x找到该绝对offset 对应消息所在文件

    2.offset-x为在文件中的相对偏移

    3.通过index文件中记录的索引找到最近的消息的位置

    4.从最近位置开始逐条寻找

    26. 如果我指定了一个timestamp,Kafka怎么查找到对应的消息?
    原理同上 但是时间的因为消息体中不带有时间戳 所以不精确

    27. 聊一聊你对Kafka的Log Retention的理解
    kafka留存策略包括 删除和压缩两种
    删除: 根据时间和大小两个方式进行删除 大小是整个partition日志文件的大小
    超过的会从老到新依次删除 时间指日志文件中的最大时间戳而非文件的最后修改时间
    压缩: 相同key的value只保存一个 压缩过的是clean 未压缩的dirty 压缩之后的偏移量不连续 未压缩时连续

    28. 聊一聊你对Kafka的Log Compaction的理解
    29. 聊一聊你对Kafka底层存储的理解(页缓存、内核层、块层、设备层)
    30. 聊一聊Kafka的延时操作的原理
    31. 聊一聊Kafka控制器的作用
    32. 消费再均衡的原理是什么?(提示:消费者协调器和消费组协调器)
    33. Kafka中的幂等是怎么实现的
    pid+序号实现,单个producer内幂等

    33. Kafka中的事务是怎么实现的(这题我去面试6家被问4次,照着答案念也要念十几分钟,面试官简直凑不要脸。实在记不住的话…只要简历上不写精通Kafka一般不会问到,我简历上写的是“熟悉Kafka,了解RabbitMQ….”)
    34. Kafka中有那些地方需要选举?这些地方的选举策略又有哪些?
    35. 失效副本是指什么?有那些应对措施?
    36. 多副本下,各个副本中的HW和LEO的演变过程
    37. 为什么Kafka不支持读写分离?
    38. Kafka在可靠性方面做了哪些改进?(HW, LeaderEpoch)
    39. Kafka中怎么实现死信队列和重试队列?
    40. Kafka中的延迟队列怎么实现(这题被问的比事务那题还要多!!!听说你会Kafka,那你说说延迟队列怎么实现?)
    41. Kafka中怎么做消息审计?
    42. Kafka中怎么做消息轨迹?
    43. Kafka中有那些配置参数比较有意思?聊一聊你的看法
    44. Kafka中有那些命名比较有意思?聊一聊你的看法
    45. Kafka有哪些指标需要着重关注?
    生产者关注MessagesInPerSec、BytesOutPerSec、BytesInPerSec 消费者关注消费延迟Lag

    46. 怎么计算Lag?(注意read_uncommitted和read_committed状态下的不同)
    参考 如何监控kafka消费Lag情况

    47. Kafka的那些设计让它有如此高的性能?
    零拷贝,页缓存,顺序写

    48. Kafka有什么优缺点?
    49. 还用过什么同质类的其它产品,与Kafka相比有什么优缺点?
    50. 为什么选择Kafka?
    吞吐量高,大数据消息系统唯一选择。

    51. 在使用Kafka的过程中遇到过什么困难?怎么解决的?
    52. 怎么样才能确保Kafka极大程度上的可靠性?
    53. 聊一聊你对Kafka生态的理解
    confluent全家桶(connect/kafka stream/ksql/center/rest proxy等),开源监控管理工具kafka-manager,kmanager等

    参考

    1. Kafka面试题全套整理 | 划重点要考!
    2. Kafka科普系列 | 什么是LSO?
    3. Kafka面试题
    展开全文
  • Kafka理论及经典面试题

    千次阅读 2020-02-05 20:48:22
    1.什么是kafkaKafka是一种高吞吐量的分布式发布–订阅消息系统。它可以处理消费者规模的网站中的所有动作流数据。 这种动作(网页浏览,搜索和其他用户的行动)是在现代网络上的许多社会功能的一个关键因素。 ...

    1.什么是kafka?
    Kafka是一种高吞吐量的分布式发布–订阅消息系统。它可以处理消费者规模的网站中的所有动作流数据。 这种动作(网页浏览,搜索和其他用户的行动)是在现代网络上的许多社会功能的一个关键因素。 这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决。 对于像Hadoop的一样的日志数据和离线分析系统,但又要求实时处理的限制,这是一个可行的解决方案。Kafka的目的是通过Hadoop的并行加载机制来统一线上和离线的消息处理,也是为了通过集群机来提供实时的消费。

    Kafka是一个分布式的流处理平台。kafka主要是作为一个分布式的、可分区的、具有副本数的日志服务系性、高容错性、访问速度快、分布式等特性;统, 具有高水平扩展主要应用场景是:日志收集系统和分布式发布–订阅消息系统.

    2.kafka的组件?

    • Topic :消息根据Topic进行归类
    • Producer:发送消息者
    • Consumer:消息接受者
    • broker:每个kafka实例(server)
    • Zookeeper:依赖集群保存meta信息。

    3.什么是zk? 应用场景?
    其实说实话,问这个问题,一般就是看看你是否了解 zookeeper,因为 zk 是分布式系统中很常见的一个基础系统。而且问的话常问的就是说 zk 的使用场景是什么?看你知道不知道一些基本的使用场景。但是其实 zk 挖深了自然是可以问的很深很深的。

    大致来说,zk 的使用场景如下,我就举几个简单的,大家能说几个就好了:

    • 分布式协调
    • 分布式锁
    • 元数据/配置信息管理
    • HA高可用性

    分布式协调
    这个其实是 zk 很经典的一个用法,简单来说,就好比,你 A 系统发送个请求到 mq,然后 B 系统消息消费之后处理了。那 A 系统如何知道 B 系统的处理结果?用 zk 就可以实现分布式系统之间的协调工作。A 系统发送请求之后可以在 zk 上对某个节点的值注册个监听器,一旦 B 系统处理完了就修改 zk 那个节点的值,A 立马就可以收到通知,完美解决。
    在这里插入图片描述
    分布式锁
    举个栗子。对某一个数据连续发出两个修改操作,两台机器同时收到了请求,但是只能一台机器先执行完另外一个机器再执行。那么此时就可以使用 zk 分布式锁,一个机器接收到了请求之后先获取 zk 上的一把分布式锁,就是可以去创建一个 znode,接着执行操作;然后另外一个机器也尝试去创建那个 znode,结果发现自己创建不了,因为被别人创建了,那只能等着,等第一个机器执行完了自己再执行。
    在这里插入图片描述
    元数据/配置信息管理
    zk 可以用作很多系统的配置信息的管理,比如 kafka、storm 等等很多分布式系统都会选用 zk 来做一些元数据、配置信息的管理,包括 dubbo 注册中心不也支持 zk 么?
    在这里插入图片描述

    HA高可用性
    这个应该是很常见的,比如 hadoop、hdfs、yarn 等很多大数据系统,都选择基于 zk 来开发 HA 高可用机制,就是一个重要进程一般会做主备两个,主进程挂了立马通过 zk 感知到切换到备用进程。
    在这里插入图片描述
    5.Kafka 与传统消息系统之间有三个关键区别?
    实际上,Kafka 并非传统意义上的消息队列,它与 RabbitMQ 等消息系统并不一样。它更像是一个分布式的文件系统或数据库。Kafka 与传统消息系统之间有三个关键区别。

    • Kafka 持久化日志,这些日志可以被重复读取和无限期保留
    • Kafka 是一个分布式系统:它以集群的方式运行,可以灵活伸缩,在内部通过复制数据提升容错能力和高可用性
    • Kafka 支持实时的流式处理

    以上三点足以将 Kafka 与传统的消息队列区别开,我们甚至可以把它看成是流式处理平台。因此,在 Kafka 里存储数据并不是什么疯狂事,甚至可以说 Kafka 本来就是设计用来存储数据的。数据经过校验后被持久化在磁盘上,并通过复制副本提升容错能力。再多的数据都不会拖慢 Kafka,在生产环境中,有些 Kafka 集群甚至已经保存超过 1 TB 的数据。

    6.JMS消息传输模型

    • 点对点模式(一对一,消费者主动拉取数据,消息收到后消息清除)

    点对点模型通常是一个基于拉取或者轮询的消息传送模型,这种模型从队列中请求信息,而不是将消息推送到客户端。这个模型的特点是发送到队列的消息被一个且只有一个接收者接收处理,即使有多个消息监听者也是如此。

    • 发布/订阅模式(一对多,数据生产后,推送给所有订阅者)

    发布订阅模型则是一个基于推送的消息传送模型。发布订阅模型可以有多种不同的订阅者,临时订阅者只在主动监听主题时才接收消息,而持久订阅者则监听主题的所有消息,即时当前订阅者不可用,处于离线状态。
    在这里插入图片描述

    7.总结一下常见 的JMS?

    JMS消息服务器 ActiveMQ
    ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线。ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的。
    主要特点:

    • 多种语言和协议编写客户端。语言: Java, C, C++, C#, Ruby, Perl, Python, PHP。应用协议:
      OpenWire,Stomp REST,WS Notification,XMPP,AMQP
    • 完全支持JMS1.1和J2EE 1.4规范 (持久化,XA消息,事务)
    • 对Spring的支持,ActiveMQ可以很容易内嵌到使用Spring的系统里面去,而且也支持Spring2.0的特性
    • 通过了常见J2EE服务器(如 Geronimo,JBoss 4, GlassFish,WebLogic)的测试,其中通过JCA 1.5 resource adaptors的配置,可以让ActiveMQ可以自动的部署到任何兼容J2EE 1.4 商业服务器上
    • 支持多种传送协议:in-VM,TCP,SSL,NIO,UDP,JGroups,JXTA
    • 支持通过JDBC和journal提供高速的消息持久化
    • 从设计上保证了高性能的集群,客户端-服务器,点对点
    • 支持Ajax
    • 支持与Axis的整合
    • 可以很容易得调用内嵌JMS provider,进行测试

    分布式消息中间件 Metamorphosis
    Metamorphosis (MetaQ) 是一个高性能、高可用、可扩展的分布式消息中间件,类似于LinkedIn的Kafka,具有消息存储顺序写、吞吐量大和支持本地和XA事务等特性,适用于大吞吐量、顺序消息、广播和日志数据传输等场景,在淘宝和支付宝有着广泛的应用,现已开源。
    主要特点:

    • 生产者、服务器和消费者都可分布

    • 消息存储顺序写

    • 性能极高,吞吐量大

    • 支持消息顺序

    • 支持本地和XA事务

    • 客户端pull,随机读,利用sendfile系统调用,zero-copy ,批量拉数据

    • 支持消费端事务

    • 支持消息广播模式

    • 支持异步发送消息

    • 支持http协议

    • 支持消息重试和recover

    • 数据迁移、扩容对用户透明

    • 消费状态保存在客户端

    • 支持同步和异步复制两种HA

    • 支持group commit

    分布式消息中间件 RocketMQ
    RocketMQ 是一款分布式、队列模型的消息中间件,具有以下特点:

    • 能够保证严格的消息顺序

    • 提供丰富的消息拉取模式

    • 高效的订阅者水平扩展能力

    • 实时的消息订阅机制

    • 亿级消息堆积能力

    • Metaq3.0 版本改名,产品名称改为RocketMQ

    其他MQ

    • .NET消息中间件 DotNetMQ
    • 基于HBase的消息队列 HQueue
    • Go 的 MQ 框架 KiteQ
    • AMQP消息服务器 RabbitMQ
    • MemcacheQ 是一个基于 MemcacheDB 的消息队列服务器。

    8.kafka 消息 默认保存多久?

    默认保存168hours(7天)

    日志保存清理策略

    属性名 含义 默认值
    log.cleanup.polict 日志清理保存的策略只有delete和compact两种 delete
    log.retention.hours 日志保存的时间,可以选择hours,minutes和ms 168(7day)
    log.retention.bytes 删除前日志文件允许保存的最大值 -1
    log.segment.delete.delay.ms 日志文件被真正删除前的保留时间 60000
    log.cleanup.interval.mins 每隔一段时间多久调用一次清理的步骤 10
    log.retention.check.interval.ms 周期性检查是否有日志符合删除的条件(新版本使用) 300000

    9.topic 删除, 物理删除和逻辑删除?
    在计算机中资料数据等都以文件形式存储,删除文件分为两种情况。分为逻辑删除和物理删除。

    • 逻辑删除:
      文件没有被真正的删除,只不过是文件名的第一个字节被改成操作系统无法识别的字符,通常这种删除操作是可逆的,就是说用适当的工具或软件可以把删除的文件恢复出来。

    • 物理删除:
      指文件存储所用到的磁存储区域被真正的擦除或清零,这样删除的文件是不可以恢复的。

    kafka中关于删除参数的配置
    delete.topic.enable=true (kafka 的topic是否物理删除,true-物理删除,false-逻辑删除)

    10.kafka 消息的有序论?

    两种方案:
    方案一,kafka topic 只设置一个partition分区
    方案二,producer将消息发送到指定partition分区

    解析:

    • 方案一:kafka默认保证同一个partition分区内的消息是有序的,则可以设置topic只使用一个分区,这样消息就是全局有序,缺点是只能被consumer
      group里的一个消费者消费,降低了性能,不适用高并发的情况
    • 方案二:既然kafka默认保证同一个partition分区内的消息是有序的,则producer可以在发送消息时可以指定需要保证顺序的几条消息发送到同一个分区,这样消费者消费时,消息就是有序。

    producer发送消息时具体到topic的哪一个partition分区,提供了三种方式

    1)指定分区
    2)不指定分区,有指定key 则根据key的hash值与分区数进行运算后确定发送到哪个partition分区
    3)不指定分区,不指定key,则轮询各分区发送

    11.CG的Consumer与topic关系?

    本质上kafka只支持Topic;

    • 每个group中可以有多个consumer,每个consumer属于一个consumer group;
      通常情况下,一个group中会包含多个consumer,这样不仅可以提高topic中消息的并发消费能力,而且还能提高"故障容错"性,如果group中的某个consumer失效那么其消费的partitions将会有其他consumer自动接管。
    • 对于Topic中的一条特定的消息,只会被订阅此Topic的每个group中的其中一个consumer消费,此消息不会发送给一个group的多个consumer;
      那么一个group中所有的consumer将会交错的消费整个Topic,每个group中consumer消息消费互相独立,我们可以认为一个group是一个"订阅"者。
    • 在kafka中,一个partition中的消息只会被group中的一个consumer消费(同一时刻);
      一个Topic中的每个partions,只会被一个"订阅者"中的一个consumer消费,不过一个consumer可以同时消费多个partitions中的消息。
    • kafka的设计原理决定,对于一个topic,同一个group中不能有多于partitions个数的consumer同时消费,否则将意味着某些consumer将无法得到消息。
      kafka只能保证一个partition中的消息被某个consumer消费时是顺序的;事实上,从Topic角度来说,当有多个partitions时,消息仍不是全局有序的。

    12.Kafka消息的分发策略

    Producer客户端负责消息的分发

    • kafka集群中的任何一个broker都可以向producer提供metadata信息,这些metadata中包含"集群中存活的servers列表"/"partitions
      leader列表"等信息;
    • 当producer获取到metadata信息之后, producer将会和Topic下所有partition
      leader保持socket连接;
    • 消息由producer直接通过socket发送到broker,中间不会经过任何"路由层",事实上,消息被路由到哪个partition上由producer客户端决定;
      比如可以采用"random"“key-hash”"轮询"等,如果一个topic中有多个partitions,那么在producer端实现"消息均衡分发"是必要的
    • 在producer端的配置文件中,开发者可以指定partition路由的方式。

    13.producer发送消息的应答机制? ACK机制? 0 1 -1 all

    Producer消息发送的应答机制 :ACK
    设置发送数据是否需要服务端的反馈,有四个值: 0,1,-1,All

    		0: producer不会等待broker发送ack 
    		1: 当leader接收到消息之后发送ack 
    		-1: 当所有的follower都同步消息成功后发送ack
    		All:
    

    request.required.acks=0

    14.segment 文件组成?

    • Segment file组成:由2大部分组成,分别为index file和data
      file,此2个文件一一对应,成对出现,后缀".index"和“.log”分别表示为segment索引文件、数据文件。
      在这里插入图片描述

    • Segment文件命名规则:partion全局的第一个segment从0开始,后续每个segment文件名为上一个segment文件最后一条消息的offset值。数值最大为64位long大小,19位数字字符长度,没有数字用0填充。

    • 索引文件存储大量元数据,数据文件存储大量消息,索引文件中元数据指向对应数据文件中message的物理偏移地址。
      在这里插入图片描述

    • segment data file由许多message组成, message物理结构如下:

    关键字 解释说明
    8 byte offset 在parition(分区)内的每条消息都有一个有序的id号,这个id号被称为偏移(offset),它可以唯一确定每条消息在parition(分区)内的位置。即offset表示partiion的第多少message
    4 byte message size message大小
    4 byte CRC32 用crc32校验message
    1 byte “magic" 表示本次发布Kafka服务程序协议版本号
    1 byte “attributes" 表示为独立版本、或标识压缩类型、或编码类型。
    4 byte key length 表示key的长度,当key为-1时,K byte key字段不填
    K byte key 可选
    value bytes payload 表示实际消息数据。

    15.kafka message消息包含那些?

    读取offset=368776的message,需要通过下面2个步骤查找。

    • 查找segment file
      00000000000000000000.index表示最开始的文件,起始偏移量(offset)为0
      00000000000000368769.index的消息量起始偏移量为368770 = 368769 + 1
      00000000000000737337.index的起始偏移量为737338=737337 + 1 其他后续文件依次类推。
      以起始偏移量命名并排序这些文件,只要根据offset 二分查找文件列表,就可以快速定位到具体文件。当offset=368776时定位到00000000000000368769.index和对应log文件。
    • 通过segment file查找message 当offset=368776时,依次定位到00000000000000368769.index的元数据物理位置和00000000000000368769.log的物理偏移地址
      然后再通过00000000000000368769.log顺序查找直到offset=368776为止。
    展开全文
  • >>>>1.Kafka面试问答Apache Kafka的受欢迎程度很高,Kafka拥有充足的就业机会和职业前景。此外,在这个时代拥有kafka知识...
        

    >>>>1.Kafka面试问答


    Apache Kafka的受欢迎程度很高,Kafka拥有充足的就业机会和职业前景。此外,在这个时代拥有kafka知识是一条快速增长的道路。所以,在这篇文章中,我们收集了Apache Kafka面试中常见的问题,并提供了答案。因此,如果您希望参加Apache Kafka面试,这是一份不错的指南。这将有助于您成功参加Kafka面试。



    640?wx_fmt=jpeg


    >>>>

    2.最佳Apache Kafka面试问题和解答


    这是Kafka最受欢迎的面试问题清单,以及任何面试官都可能问到的答案。所以,继续学习直到本文的结尾,希望对你有帮助!


    问题1:什么是Apache Kafka?

    答:Apache Kafka是一个发布 - 订阅开源消息代理应用程序。这个消息传递应用程序是用“scala”编码的。基本上,这个项目是由Apache软件启动的。Kafka的设计模式主要基于事务日志设计。

    问题2:Kafka中有哪几个组件?

    答:Kafka最重要的元素是:


    640?wx_fmt=png

    • 主题:Kafka主题是一堆或一组消息。

    • 生产者:在Kafka,生产者发布通信以及向Kafka主题发布消息。

    • 消费者:Kafka消费者订阅了一个主题,并且还从主题中读取和处理消息。

    • 经纪人:在管理主题中的消息存储时,我们使用Kafka Brokers。

    问题3:解释偏移的作用。

    答:给分区中的消息提供了一个顺序ID号,我们称之为偏移量。因此,为了唯一地识别分区中的每条消息,我们使用这些偏移量。

    问题4:什么是消费者组?

    答:消费者组的概念是Apache Kafka独有的。基本上,每个Kafka消费群体都由一个或多个共同消费一组订阅主题的消费者组成。

    问题5:ZooKeeper在Kafka中的作用是什么?

    答:Apache Kafka是一个使用Zookeeper构建的分布式系统。虽然,Zookeeper的主要作用是在集群中的不同节点之间建立协调。但是,如果任何节点失败,我们还使用Zookeeper从先前提交的偏移量中恢复,因为它做周期性提交偏移量工作。

    问题6:没有ZooKeeper可以使用Kafka吗?

    答:绕过Zookeeper并直接连接到Kafka服务器是不可能的,所以答案是否定的。如果以某种方式,使ZooKeeper关闭,则无法为任何客户端请求提供服务。

    问题8:为什么Kafka技术很重要?

    答:Kafka有一些优点,因此使用起来很重要:

    640?wx_fmt=png

    • 高吞吐量:我们在Kafka中不需要任何大型硬件,因为它能够处理高速和大容量数据。此外,它还可以支持每秒数千条消息的消息吞吐量。

    • 低延迟:Kafka可以轻松处理这些消息,具有毫秒级的极低延迟,这是大多数新用例所要求的。

    • 容错:Kafka能够抵抗集群中的节点/机器故障。

    • 耐久性:由于Kafka支持消息复制,因此消息永远不会丢失。这是耐久性背后的原因之一。

    • 可扩展性:卡夫卡可以扩展,而不需要通过添加额外的节点而在运行中造成任何停机。

    问题9:Kafka的主要API有哪些?

    答:Apache Kafka有4个主要API:

           生产者API

           消费者API

           流 API

           连接器API

    问题10:什么是消费者或用户?

    答:Kafka消费者订阅一个主题,并读取和处理来自该主题的消息。此外,有了消费者组的名字,消费者就给自己贴上了标签。换句话说,在每个订阅使用者组中,发布到主题的每个记录都传递到一个使用者实例。确保使用者实例可能位于单独的进程或单独的计算机上。

    Apache Kafka对于新手的面试问题:1,2,4,7,8,9,10

    Apache Kafka对于有经验的人的面试问题:3,5,6


    >>>>

    3.比较棘手的Kafka面试问题和答案


    问题11解释领导者和追随者的概念。

    答:在Kafka的每个分区中,都有一个服务器充当领导者,0到多个服务器充当追随者的角色。

    问题12是什么确保了Kafka中服务器的负载平衡?

    答:由于领导者的主要角色是执行分区的所有读写请求的任务,而追随者被动地复制领导者。因此,在领导者失败时,其中一个追随者接管了领导者的角色。基本上,整个过程可确保服务器的负载平衡。

    问题13副本和ISR扮演什么角色?

    答:基本上,复制日志的节点列表就是副本。特别是对于特定的分区。但是,无论他们是否扮演领导者的角色,他们都是如此。
    此外,ISR指的是同步副本。在定义ISR时,它是一组与领导者同步的消息副本。

    问题14为什么Kafka的复制至关重要?

    答:由于复制,我们可以确保发布的消息不会丢失,并且可以在发生任何机器错误、程序错误或频繁的软件升级时使用。

    问题15如果副本长时间不在ISR中,这意味着什么?

    答:简单地说,这意味着跟随者不能像领导者收集数据那样快速地获取数据。

    问题16启动Kafka服务器的过程是什么?

    答:初始化ZooKeeper服务器是非常重要的一步,因为Kafka使用ZooKeeper,所以启动Kafka服务器的过程是:

    要启动ZooKeeper服务器:>bin/zooKeeper-server-start.sh  config/zooKeeper.properties

    接下来,启动Kafka服务器:>bin/kafka-server-start.sh config/server.properties

    问题17在生产者中,何时发生QueueFullException?

    答:每当Kafka生产者试图以代理的身份在当时无法处理的速度发送消息时,通常都会发生QueueFullException。但是,为了协作处理增加的负载,用户需要添加足够的代理,因为生产者不会阻止。

    问题18解释Kafka Producer API的作用。

    答:允许应用程序将记录流发布到一个或多个Kafka主题的API就是我们所说的Producer API。

    问题19Kafka和Flume之间的主要区别是什么?

    答:Kafka和Flume之间的主要区别是:

    • 工具类型

             Apache Kafka——Kafka是面向多个生产商和消费者的通用工具。

             Apache Flume——Flume被认为是特定应用程序的专用工具。

    • 复制功能

      Apache Kafka——Kafka可以复制事件。

      Apache Flume——Flume不复制事件。

    问题20Apache Kafka是分布式流处理平台吗?如果是,你能用它做什么?

    答:毫无疑问,Kafka是一个流处理平台。它可以帮助:

    1.轻松推送记录

    2.可以存储大量记录,而不会出现任何存储问题

    3.它还可以在记录进入时对其进行处理。

    Apache Kafka对于新手的面试问题:11,13,14,16,17,18,19

    Apache Kafka对于有经验的人的面试问题:12,15,20


    >>>>

    4.高级Kafka面试问题

    问题21你能用Kafka做什么?

    答:它可以以多种方式执行,例如:

    >>为了在两个系统之间传输数据,我们可以用它构建实时的数据流管道。

    >>另外,我们可以用Kafka构建一个实时流处理平台,它可以对数据快速做出反应。

    问题22在Kafka集群中保留期的目的是什么?

    答:保留期限保留了Kafka群集中的所有已发布记录。它不会检查它们是否已被消耗。此外,可以通过使用保留期的配置设置来丢弃记录。而且,它可以释放一些空间。

    问题23解释Kafka可以接收的消息最大为多少?

    答:Kafka可以接收的最大消息大小约为1000000字节。

    问题24传统的消息传递方法有哪些类型?

    答:基本上,传统的消息传递方法有两种,如:

    • 排队:这是一种消费者池可以从服务器读取消息并且每条消息转到其中一个消息的方法。

    • 发布-订阅:在发布-订阅中,消息被广播给所有消费者。

    问题25ISR在Kafka环境中代表什么?

    答:ISR指的是同步副本。这些通常被分类为一组消息副本,它们被同步为领导者。

    问题26什么是Kafka中的地域复制?

    答:对于我们的集群,Kafka MirrorMaker提供地理复制。基本上,消息是通过MirrorMaker跨多个数据中心或云区域复制的。因此,它可以在主动/被动场景中用于备份和恢复;也可以将数据放在离用户更近的位置,或者支持数据位置要求。

    问题27解释多租户是什么?

    答:我们可以轻松地将Kafka部署为多租户解决方案。但是,通过配置主题可以生成或使用数据,可以启用多租户。此外,它还为配额提供操作支持。

    问题28消费者API的作用是什么?

    答:允许应用程序订阅一个或多个主题并处理生成给它们的记录流的API,我们称之为消费者API。

    问题29解释流API的作用?

    答:一种允许应用程序当流处理器的API,它还使用一个或多个主题的输入流,并生成一个输出流到一个或多个输出主题,此外,有效地将输入流转换为输出流,我们称之为流API。

    问题30连接器API的作用是什么?

    答:一个允许运行和构建可重用的生产者或消费者的API,将Kafka主题连接到现有的应用程序或数据系统,我们称之为连接器API。

    Apache Kafka对于新手的面试问题:21, 23, 25, 26, 27, 28, 29, 30

    Apache Kafka对于有经验的人的面试问题:24, 22

    问题31解释生产者是什么?

    答:生产者的主要作用是将数据发布到他们选择的主题上。基本上,它的职责是选择要分配给主题内分区的记录。

    问题32比较RabbitMQ与Apache Kafka

    答:Apache Kafka的另一个选择是RabbitMQ。那么,让我们比较两者:

    1. 功能

      Apache Kafka– Kafka是分布式的、持久的和高度可用的,这里共享和复制数据

      RabbitMQ中没有此类功能

    2. 性能速度

      Apache Kafka–达到每秒100000条消息。

      RabbitMQ每秒20000条消息。

    问题33比较传统队列系统与Apache Kafka

    答:让我们比较一下传统队列系统与Apache Kafka的功能:

    • 消息保留

           传统的队列系统 - 它通常从队列末尾处理完成后删除消息。
            Apache Kafka中,消息即使在处理后仍然存在。这意味着Kafka中的消息不会因消费者收到消息而被删除。

    • 基于逻辑的处理

      传统队列系统不允许基于类似消息或事件处理逻辑。

      Apache Kafka允许基于类似消息或事件处理逻辑。

    问题34为什么要使用Apache Kafka集群?

    答:为了克服收集大量数据和分析收集数据的挑战,我们需要一个消息队列系统。因此Apache Kafka应运而生。其好处是:

    • 只需存储/发送事件以进行实时处理,就可以跟踪Web活动。

    • 通过这一点,我们可以发出警报并报告操作指标。

    • 此外,我们可以将数据转换为标准格式。

    • 此外,它允许对主题的流数据进行连续处理。

    由于它的广泛使用,它秒杀了竞品,如ActiveMQ,RabbitMQ等。

    问题35解释术语“Log Anatomy”

    答:我们将日志视为分区。基本上,数据源将消息写入日志。其优点之一是,在任何时候,都有一个或多个消费者从他们选择的日志中读取数据。下面的图表显示,数据源正在写入一个日志,而用户正在以不同的偏移量读取该日志。

    640?wx_fmt=png

    问题36Kafka中的数据日志是什么?

    答:我们知道,在Kafka中,消息会保留相当长的时间。此外,消费者还可以根据自己的方便进行阅读。尽管如此,有一种可能的情况是,如果将Kafka配置为将消息保留24小时,并且消费者可能停机超过24小时,则消费者可能会丢失这些消息。但是,我们仍然可以从上次已知的偏移中读取这些消息,但仅限于消费者的部分停机时间仅为60分钟的情况。此外,关于消费者从一个话题中读到什么,Kafka不会保持状态。

    问题37解释如何调整Kafka以获得最佳性能。

    答:因此,调优Apache Kafka的方法是调优它的几个组件:

    1. 调整Kafka生产者

    2. Kafka代理调优

    3. 调整Kafka消费者

    问题38Apache Kafka的缺陷

    答:Kafka的局限性是:

    1. 没有完整的监控工具集

    2. 消息调整的问题

    3. 不支持通配符主题选择

    4. 速度问题

    问题39列出所有Apache Kafka业务

    答:Apache Kafka的业务包括:

    1. 添加和删除Kafka主题

    2. 如何修改Kafka主题

    3. 如何关机

    4. 在Kafka集群之间镜像数据

    5. 找到消费者的位置

    6. 扩展您的Kafka群集

    7. 自动迁移数据

    8. 退出服务器

    9. 数据中心

    问题40解释Apache Kafka用例?

    答:Apache Kafka有很多用例,例如:

    640?wx_fmt=png

    • Kafka指标

      可以使用Kafka进行操作监测数据。此外,为了生成操作数据的集中提要,它涉及到从分布式应用程序聚合统计信息。

    • Kafka日志聚合

             从组织中的多个服务收集日志。

    • 流处理

      在流处理过程中,Kafka的强耐久性非常有用。

    Apache Kafka对于新手的面试问题:31, 32, 33, 34, 38, 39, 40

    Apache Kafka对于有经验的人的面试问题:35, 36, 37

    >>>>

    5.基于特征的Kafka面试问题


    问题41Kafka的一些最显著的应用。

    答:Netflix,Mozilla,Oracle

    问题42Kafka流的特点。

    答:Kafka流的一些最佳功能是

    • Kafka Streams具有高度可扩展性和容错性。

    • Kafka部署到容器,VM,裸机,云。

    • 我们可以说,Kafka流对于小型,中型和大型用例同样可行。

    • 此外,它完全与Kafka安全集成。

    • 编写标准Java应用程序。

    • 完全一次处理语义。

    • 而且,不需要单独的处理集群。

    问题43Kafka的流处理是什么意思?

    答:连续、实时、并发和以逐记录方式处理数据的类型,我们称之为Kafka流处理。

    问题44系统工具有哪些类型?

    答:系统工具有三种类型:

    1. Kafka迁移工具:它有助于将代理从一个版本迁移到另一个版本。

    2. Mirror Maker:Mirror Maker工具有助于将一个Kafka集群的镜像提供给另一个。

    3. 消费者检查:对于指定的主题集和消费者组,它显示主题,分区,所有者。

    问题45什么是复制工具及其类型?

    答:为了增强持久性和更高的可用性,这里提供了复制工具。其类型为

    • 创建主题工具

    • 列表主题工具

    • 添加分区工具

    问题46Java在Apache Kafka中的重要性是什么?

    答:为了满足Kafka标准的高处理速率需求,我们可以使用java语言。此外,对于Kafka的消费者客户,Java也提供了良好的社区支持。所以,我们可以说在Java中实现Kafka是一个正确的选择。

    问题47说明Kafka的一个最佳特征。

    答:Kafka的最佳特性是“各种各样的用例”。

    这意味着Kafka能够管理各种各样的用例,这些用例对于数据湖来说非常常见。例如日志聚合、Web活动跟踪等。

    问题48解释术语“主题复制因子”。

    答:在设计Kafka系统时,考虑主题复制是非常重要的。

    问题49解释一些Kafka流实时用例。

    答:《纽约时报》:该公司使用它来实时存储和分发已发布的内容到各种应用程序和系统,使其可供读者使用。基本上,它使用Apache Kafka和Kafka流。

    Zalando:作为ESB(企业服务总线)作为欧洲领先的在线时尚零售商,Zalando使用Kafka。

    LINE:基本上,为了相互通信,LINE应用程序使用Apache Kafka作为其服务的中心数据中心。

    问题50Kafka提供的保证是什么?

    答:他们是

    • 生产者向特定主题分区发送的消息的顺序相同。

    • 此外,消费者实例按照它们存储在日志中的顺序查看记录。

    • 此外,即使不丢失任何提交给日志的记录,我们也可以容忍最多N-1个服务器故障。

    Apache Kafka对于新手的面试问题:41, 42, 43, 44, 45, 47, 49

    Apache Kafka对于有经验的人的面试问题:46, 48

    最后,这便是关于Apache Kafka面试的问题和答案。

    希望你们看了我的文章能够有所收获。

    长按订阅更多精彩▼

    640?wx_fmt=jpeg

    展开全文
  • Kafka常见面试题

    万次阅读 多人点赞 2019-05-19 22:26:09
    1 什么是kafka Kafka是分布式发布-订阅消息系统,它最初是由LinkedIn公司开发的,之后成为Apache项目的一部分,Kafka是一个分布式,可划分的,冗余备份的持久性的日志服务,它主要用于处理流式数据。 2 为什么要...
  • kafka面试题(附答案)

    千次阅读 2020-01-14 18:01:43
    1.什么是kafka Kafka是分布式发布-订阅消息系统,它最初是由LinkedIn公司开发的,之后成为Apache项目的一部分,Kafka是一个分布式,可划分的,冗余备份的持久性的日志服务,它主要用于处理流式数据。 2.为什么...
  • Kafka最全面试题整理|划重点要考

    万次阅读 热门讨论 2020-04-27 13:32:35
    有很多人问过我要过Kafka相关的面试题,我一直懒得整理,这几天花了点时间,结合之前面试被问过的、别人咨询过的、我会问别人的进行了相关的整理,也就几十题,大家花个几分钟看看应该都会。面试题列表如下: Kafka...
  • Kafka面试题参考

    万次阅读 2019-04-19 13:21:47
    1.Kafka的设计时什么样的呢? Kafka将消息以topic为单位进行归纳 将向Kafka topic发布消息的程序成为producers. 将预订topics并消费消息的程序成为consumer. Kafka以集群的方式运行,可以由一个或多个服务组成,...
  • 分享一波Kafka面试题&答案

    千次阅读 2019-03-12 09:58:36
    今天分享几个Kafka面试题,这些面试题是大数据工程师在面试中经常问到的一些问题,在此整理一下,分享给大家。 如果你是 Java 开发工程师,也可以看看这份面试题目:假如我是面试官,我会这样虐你 1 什么是kafka ...
  • Kafka面试题总结

    万次阅读 多人点赞 2020-07-10 10:43:49
    请说明什么是Apache Kafka? Apache Kafka是由Apache开发的一种发布订阅消息系统,它是一个分布式的、分区的和重复的日志服务。 请说明什么是传统的消息传递方法? 传统的消息传递方法包括两种: 排队:在...
  • Kafka面试题(附答案)

    千次阅读 2019-05-15 17:25:05
    1、请说明什么是Apache Kafka? Apache Kafka是由Apache开发的一种发布订阅消息系统,它是一个分布式的、分区的和可复制的提交日志服务。 2、说说Kafka的使用场景? ①异步处理 ②应用解耦 ③流量削峰 ④日志...
  • Kafka面试相关问题

    千次阅读 2019-07-05 10:09:58
  • 一面 hashmap与concurrenthashmap的区别 垃圾回收算法以及垃圾回收器 CMS的回收步骤 G1和CMS的区别 CMS哪个阶段是并发的哪个阶段是串行的? G1内部是如何分区的(region) HashMap如何解决Hash冲突 ...
  • Kafka面试题

    万次阅读 2019-06-07 08:21:46
    Kafka是现在流行的消息中间件,在大数据开发面试中被问到的可能性非常大,下面放出一些kafka面试中,经常可能被问到的kafka的面试题,大家可以学习学习: Kafka的用途有哪些?使用场景如何? Kafka中的ISR...
  • 蚂蚁中间件一面: 自我介绍 JVM垃圾回收算法和垃圾回收器有哪些,最新的JDK采用什么算法。 新生代和老年代的回收机制。 讲一下ArrayList和linkedlist的区别,ArrayList与HashMap的扩容方式。 Concurrenthashmap1.8...
  • 十五、Kafka 152. kafka 可以脱离 zookeeper 单独使用吗?为什么? kafka 不能脱离 zookeeper 单独使用,因为 kafka 使用 zookeeper 管理和协调 kafka 的节点服务器。 153. kafka 有几种数据保留的策略? kafka 有两...
  • kafka面试题整理

    千次阅读 2019-01-03 14:40:59
    下面将从Kafka文件存储机制和物理结构角度,分析Kafka是如何实现高效文件存储,及实际应用效果。    1.1 Kafka的特性: - 高吞吐量、低延迟:kafka每秒可以处理几十万条消息,它的延迟最低只有几毫秒,每个topic...
  • hdfs面试题 MapReduce面试题 hive面试题 kafka面试题 hbase面试题 spark面试题 flume面试题
  • Java面试系列:kafka面试题

    万次阅读 2020-05-11 18:11:35
    1.kafka 面试题 1、如何获取 topic 主题的列表 2、生产者和消费者的命令行是什么? 3、consumer 是推还是拉? 4、讲讲 kafka 维护消费状态跟踪的方法 5、讲一下主从同步 6、为什么需要消息系统,mysql 不能...
  • kafka和rabbitmq 的区别

    万次阅读 2019-06-20 10:18:07
    kafka是采用Scala语言开发,它主要用于处理活跃的流式数据,大数据量的数据处理上 二、结构不同 RabbitMQ采用AMQP(Advanced Message Queuing Protocol,高级消息队列协议)是一个进程间传递异步消息的网络协议 ...
1 2 3 4 5 ... 20
收藏数 9,980
精华内容 3,992
关键字:

kafka面试题