Kafka第三期高频面试题:夺命10连问(六千字解读)

本文详细解读了Kafka在面试中常被问到的十大问题,涵盖了Kafka的使用原因、与其他消息队列的对比、高处理效率的秘密、不支持读写分离的原因、offset理解、Rebalance机制、事务处理、Leader选举场景以及Consumer Group和ZooKeeper的角色。通过这些问题,深入剖析了Kafka的关键特性和实际应用。
摘要由CSDN通过智能技术生成

这是第三个10条Kafka面试题集锦,感谢各位朋友阅读,在面试的时候,很多面试官都喜欢问Kafka相关问题。这不难理解,因为目前Kafka仍然是大数据行业内消息中间件的王者。下面是我和我的小伙伴一起整理的第三期Kafka10连问。

一 你们公司为什么要用Kafka

1.1 缓冲和削峰

在任何重要的系统中,都会有需要不同的处理时间的元素。例如,加载一张图片比应用过滤器花费更少的时间。消息队列通过一个缓冲层来帮助任务最高效率的执行———写入队列的处理会尽可能的快速。该缓冲有助于控制和优化数据流经过系统的速度。

在访问量剧增的情况下,应用仍然需要继续发挥作用,但是这样的突发流量并不常见;如果为以能处理这类峰值访问为标准来投入资源随时待命无疑是巨大的浪费。使用消息队列能够使关键组件顶住突发的访问压力,而不会因为突发的超负荷的请求而完全崩溃。

1.2 解耦和扩展

在项目启动之初来预测将来项目会碰到什么需求,是极其困难的。消息系统在处理过程中间插入了一个隐含的、基于数据的接口层,两边的处理过程都要实现这一接口。这允许你独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束。

因为消息队列解耦了你的处理过程,所以增大消息入队和处理的频率是很容易的,只要另外增加处理过程即可。不需要改变代码、不需要调节参数。扩展就像调大电力按钮一样简单。

1.3 冗余(副本)

有些情况下,处理数据的过程会失败。除非数据被持久化,否则将造成丢失。消息队列把数据进行持久化直到它们已经被完全处理,通过这一方式规避了数据丢失风险。许多消息队列所采用的"插入-获取-删除"范式中,在把一个消息从队列中删除之前,需要你的处理系统明确的指出该消息已经被处理完毕,从而确保你的数据被安全的保存直到你使用完毕。

1.4 健壮性

消息队列可以堆积请求,所以消费端业务即使短时间死掉,也不会影响主要业务的正常进行。同时系统的一部分组件失效时,不会影响到整个系统。消息队列降低了进程间的耦合度,所以即使一个处理消息的进程挂掉,加入队列中的消息仍然可以在系统恢复后被处理。

1.5 异步通信和顺序性保证

很多时候,用户不想也不需要立即处理消息。消息队列提供了异步处理机制,允许用户把一个消息放入队列,但并不立即处理它。想向队列中放入多少消息就放多少,然后在需要的时候再去处理它们。

二 常见的消息队列对比

2.1 RabbitMQ

RabbitMQ是使用Erlang编写的一个开源的消息队列,本身支持很多的协议:AMQP,XMPP, SMTP, STOMP,也正因如此,它非常重量级,更适合于企业级的开发。同时实现了Broker构架,这意味着消息在发送给客户端时先在中心队列排队。对路由,负载均衡或者数据持久化都有很好的支持。

2.2 Redis

Redis是一个基于Key-Value对的NoSQL数据库,开发维护很活跃。虽然它是一个Key-Value数据库存储系统,但它本身支持MQ功能,所以完全可以当做一个轻量级的队列服务来使用。对于RabbitMQ和Redis的入队和出队操作,各执行100万次,每10万次记录一次执行时间。测试数据分为128Bytes、512Bytes、1K和10K四个不同大小的数据。实验表明:入队时,当数据比较小时Redis的性能要高于RabbitMQ,而如果数据大小超过了10K,Redis则慢的无法忍受;出队时,无论数据大小,Redis都表现出非常好的性能,而RabbitMQ的出队性能则远低于Redis。

2.3 ZeroMQ

ZeroMQ号称最快的消息队列系统,尤其针对大吞吐量的需求场景。ZeroMQ能够实现RabbitMQ不擅长的高级/复杂的队列,但是开发人员需要自己组合多种技术框架,技术上的复杂度是对这MQ能够应用成功的挑战。ZeroMQ具有一个独特的非中间件的模式,你不需要安装和运行一个消息服务器或中间件,因为你的应用程序将扮演这个服务器角色。你只需要简单的引用ZeroMQ程序库,可以使用NuGet安装,然后你就可以愉快的在应用程序之间发送消息了。但是ZeroMQ仅提供非持久性的队列,也就是说如果宕机,数据将会丢失。其中,Twitter的Storm 0.9.0以前的版本中默认使用ZeroMQ作为

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一些 Kafka 高频面试题: 1. 什么是 KafkaKafka 是一个分布式流处理平台,主要用于处理实时数据流和实时数据流的存储。它使用发布/订阅模式,支持高吞吐量、持久性和容错性。 2. Kafka 的主要组件有哪些? Kafka 的主要组件包括生产者、消费者、Broker、主题、分区和副本。 3. Kafka 中的分区有什么作用? 分区是 Kafka 中的一个重要概念,它允许将主题分成多个部分,以便实现水平扩展和并行处理。每个分区都有一个唯一的标识符,称为分区 ID。 4. Kafka 的消息保证模式有哪些? Kafka 提供两种消息保证模式:at least once 和 exactly once。at least once 模式确保每条消息最少被传递一次,而 exactly once 模式确保每条消息恰好被传递一次。 5. Kafka 的消息保存策略有哪些? Kafka 的消息保存策略包括删除与保留。删除策略包括删除旧的消息和删除无用的主题,保留策略包括保留最近的消息和保留所有消息。 6. Kafka 的主题是如何分配到分区的? Kafka 使用一种称为哈希分区的算法,将主题中的消息均匀分配到分区中。该算法使用消息键和分区数来计算消息应该被分配到哪个分区中。 7. Kafka 中的消费者组是什么? 消费者组是一组消费者,用于消费同一主题的消息。Kafka 使用消费者组来实现负载平衡和故障转移。 8. Kafka 中的 ISR 是什么? ISR(In-Sync Replicas)是指与主副本同步的备份副本。当主副本失效时,ISR 中的任何一个备份副本都可以被提升为新的主副本。 9. Kafka 中的副本同步是如何实现的? Kafka 中的副本同步是通过使用复制管道来实现的。主副本将消息写入其本地日志中,并将消息发送到其所有备份副本的复制管道中。备份副本将消息写入其本地日志中,并在收到确认后将确认发送回主副本。 10. Kafka 中的消费者如何处理消息的重复? 在 at least once 模式下,消费者可能会收到重复的消息。为了避免重复处理,消费者可以使用消息的唯一标识符来检查消息是否已经被处理过。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值