![](https://img-blog.csdnimg.cn/aace602fad7e49798515c18c60364ebe.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Kafka 面试题分享
文章平均质量分 80
Kafka是一个分布式流处理平台,它由Apache软件基金会开发,是一个开源流处理项目。Kafka最初是由LinkedIn公司开发,并于2011年初开源。
在流式计算中,Kafka一般用来缓存数据,Spark通过消费Kafka的数据进行计算。此外,Kafka是一个分布式消息队列,它根据Topic进
之乎者也·
机车疾驰在路上,代码飞舞在指尖,热血与逻辑交织,创造属于我的数字世界。
展开
-
架构设计内容分享(十三):单节点2000Wtps,Kafka怎么做的?
自定义分区器可以参考下面。Kafka默认的分区器规则:1)当消息的key存在时,首先获取当前topic下的所有分区数,然后对key进行求hash值,根据hash值和分区总数进行取余,获取所属的的分区。2)如果key不存在时,会根据topic获取一个递增的数值,然后通过和分区数进行取余,获取所属的分区。原创 2023-12-21 10:02:05 · 861 阅读 · 0 评论 -
JAVA面试题分享一百五十六:RocketMQ和Kafka的区别?
全称(message queue)消息队列,一个用于接收消息、存储消息并转发消息的中间件多用于解决异步、削峰、解耦等场景,是能接收消息并转发消息。原创 2023-12-03 13:55:17 · 1348 阅读 · 0 评论 -
JAVA面试题分享二百四十五:Kafka流处理怎么理解?
批处理是一种数据处理方式,它按照固定的时间间隔或固定的数据量来收集、处理和分析数据。批处理适用于那些不需要实时响应的任务,如数据报表生成、大规模数据清洗、离线数据分析等。在批处理中,数据通常存储在一个集中的位置,然后周期性地批量处理。这个处理周期可以是每天、每周或根据业务需求的其他时间间隔。批处理任务会在处理过程中消耗大量资源,因为它需要处理整个数据集。原创 2023-12-14 13:40:13 · 978 阅读 · 0 评论 -
JAVA面试题分享一百六十三:Kafka如何实现延时推送?
延时队列:是一种消息队列,可以用于在指定时间或经过一定时间后执行某种操作。本案例已成功实现Kafka的延时队列,并进行实测,代码引入可用非常方便。Kafka实现的延时队列支持秒级别的延时任务,不支持毫秒级别,但是毫秒级别的延时任务也没有意义注意一个主题对应的延时时间是一致的,不能在同一个主题里放不同时间的延时任务。原创 2023-12-03 16:40:33 · 1997 阅读 · 3 评论 -
JAVA面试题分享一百六十二:Kafka消息重复消费问题?
消息重复消费的根本原因都在于:已经消费了数据,但是offset没有成功提交。其中很大一部分原因在于发生了再均衡。1)消费者宕机、重启等。导致消息已经消费但是没有提交offset。2)消费者使用自动提交offset,但当还没有提交的时候,有新的消费者加入或者移除,发生了rebalance(再平衡)。再次消费的时候,消费者会根据提交的偏移量来,于是重复消费了数据。原创 2023-12-03 16:33:52 · 1039 阅读 · 0 评论 -
JAVA面试题分享一百六十一:Kafka如何保证MQ消息不丢失?
引入MQ消息中间件最直接的目的:系统解耦以及流量控制系统解耦: 上下游系统之间的通信相互依赖,利用MQ消息队列可以隔离上下游环境变化带来的不稳定因素。流量控制: 超高并发场景中,引入MQ可以实现流量 “削峰填谷” 的作用以及服务异步处理,不至于打崩服务。引入MQ同样带来其他问题:数据一致性。在分布式系统中,如果两个节点之间存在数据同步,就会带来数据一致性的问题。消息生产端发送消息到MQ再到消息消费端需要保证消息不丢失。原创 2023-12-03 16:19:50 · 897 阅读 · 0 评论 -
Kafka内容分享(七):Kafka 数据清理和配额限速
Kafka日志管理器中会有一个专门的日志删除任务来定期检测和删除不符合保留条件的日志分段文件,这个周期可以通过broker端参数log.retention.check.interval.ms来配置,默认值为300,000,即5分钟。日志删除任务会检查当前日志的大小是否超过设定的阈值来寻找可删除的日志分段的文件集合。log.retention.bytes 配置的是日志文件的总大小,而不是单个的日志分段的大小,一个日志文件包含多个日志分段。Log Compaction是默认的日志删除之外的清理过时数据的方式。原创 2023-12-11 09:13:53 · 1556 阅读 · 0 评论 -
Kafka内容分享(六):Kafka 原理
controller是kafka集群的老大,是针对Broker的一个角色Leader是针对partition的一个角色,是通过ISR来进行快速选举Kafka启动时,会在所有的broker中选择一个controller前面leader和follower是针对partition,而controller是针对broker的创建topic、或者添加分区、修改副本数量之类的管理任务都是由controller完成的Kafka分区leader的选举,也是由controller决定的。原创 2023-12-11 09:09:43 · 870 阅读 · 0 评论 -
Kafka内容分享(五):Kafka 分区和副本机制
实现步骤:创建自定义分区器@Override@Override// cluster.partitionCountForTopic 表示获取指定topic的分区数量@Override在Kafka生产者配置中,自定使用自定义分区器的类名在开发工作中,当业务前提不复杂时,可以使用Kafka命令来进行一些集群的管理工作。原创 2023-12-11 08:44:31 · 1261 阅读 · 0 评论 -
Kafka内容分享(四):Kafka 架构和幂等性与事务
拿http举例来说,一次或多次请求,得到地响应是一致的(网络超时等问题除外),换句话说,就是执行多次操作与执行一次操作的影响是一样的。如果,某个系统是不具备幂等性的,如果用户重复提交了某个表格,就可能会造成不良影响。例如:用户在浏览器上点击了多次提交订单按钮,会在后台生成多个一模一样的订单。Kafka事务是2017年Kafka 0.11.0.0引入的新特性。类似于数据库的事务。Kafka事务指的是生产者生产消息以及消费者提交offset的操作可以在一个原子操作中,要么都成功,要么都失败。原创 2023-12-11 08:35:27 · 869 阅读 · 0 评论 -
Kafka内容分享(三):Kafka 基础操作以及基准测试
*** 自定义序列化器*/@Override@Overridetry {= null) {} else {= null) {} else {@Override使用自定义的序列化器Company company = Company.builder().name("kafka").address("北京").build();原创 2023-12-10 22:40:10 · 1063 阅读 · 0 评论 -
Kafka内容分享(二):Kafka 特性和环境安装
电商网站中,新的用户注册时,需要将用户的信息保存到数据库中,同时还需要额外发送注册的邮件通知、以及短信注册码给用户。但因为发送邮件、发送注册短信需要连接外部的服务器,需要额外等待一段时间,此时,就可以使用消息队列来进行异步处理,从而实现快速响应。)、App(抖音、美团、滴滴等)等需要分析用户行为,要根据用户的访问行为来发现用户的喜好以及活跃情况,需要在页面上收集大量的用户访问信息。我们之前也学习过使用Java JDBC来访问操作MySQL数据库,它的交互模型是这样的:。原创 2023-12-10 22:35:32 · 941 阅读 · 0 评论 -
Kafka内容分享(一):Kafka 基础知识
当一个Broker接收到消息后,它会将消息保存到本地磁盘上,并将消息的副本发送给其他Broker。Kafka提供了消息过期时间的功能,在消息发送时可以指定消息过期时间,Kafka会自动删除已经过期的消息。在该命令中,--bootstrap-server指定Kafka服务器的地址,--topic指定要接收的消息主题。在该命令中,--broker-list指定Kafka服务器的地址,--topic指定消息的主题。Kafka的消息是持久化到磁盘上的,可以设置消息的过期时间来自动清理过期消息。原创 2023-12-10 22:30:44 · 842 阅读 · 0 评论 -
Kafka面试小结九:kafka的rebalance机制
今天主要分享一下 kafka 的 rebalance,在 kafka 中,rebalance 是一个十分重要的概念,很多时候引发的一些问题可能都是由于 rebalance 引起的,rebalance 也就是再均衡,顾名思义,再均衡就是再次负载均衡,下面会对再均衡进行一个详细的描述。(1)range策略就是按照分区序号排序(范围分配),假设 n=分区数/消费者数量 = 3, m=分区数%消费者数量 = 1,那么前 m 个消费者每个分配 n+1 个分区,后面的(消费者数量-m )个消费者每个分配 n 个分区。原创 2023-10-31 11:03:07 · 194 阅读 · 0 评论 -
Kafka面试小结八:kafka数据存储在内存还是磁盘
然后,Kafka使用一定的时间间隔将缓存中的消息批量写入磁盘。缓存的大小可以通过Kafka配置中的`log.flush.interval.messages`和`log.flush.interval.ms`参数来配置。当缓存中的消息被写入磁盘时,它们被追加到一个或多个日志文件中。需要注意的是,Kafka的数据存储在磁盘上是持久的,而在内存中的缓存则具有一定的容量限制。当缓存的大小达到了阈值或者达到了一定的时间间隔时,Kafka会将缓存中的消息写入磁盘,以确保数据的安全性和可靠性。原创 2023-10-31 10:56:00 · 1455 阅读 · 0 评论 -
Kafka面试小结七:kafka各个角色的介绍
即代表的一个kafka的server服务器。kafka下的消息逻辑概念,可以看成众多的消息的集合。一个topic先可以多个分区,不同的分区可以分别部署在broker中。同一个分区的不同副本保存相同的数据,副本之间是一主多从,Leader和Follower角色。Leader副本负责读写请求,Folower只与Leader副本消息同步。Leader副本出现故障后,则从Follower副本中选举Leader副本对外提供服务。可以通过提高副本数量,可以提高容灾能力。原创 2023-10-31 10:51:18 · 133 阅读 · 0 评论 -
Kafka面试小结六:kafka如果保证数据一致性?
leader 发生故障之后,会从 ISR 中选出一个新的 leader,之后,为保证多个副本之间的 数据一致性,其余的 follower 会先将各自的 log 文件高于 HW 的部分截掉,然后从新的 leader 同步数据。follower 发生故障后会被临时踢出 ISR,待该 follower 恢复后,follower 会读取本地磁盘 记录的上次的 HW,并将 log 文件高于 HW 的部分截取掉,从 HW 开始向 leader 进行同步。原创 2023-10-31 10:48:58 · 340 阅读 · 0 评论 -
Kafka面试小结五:kafka为何高效?为何速度很快?
是的,所有的问题,思路,优化点都已经列出来了,我们可以尽可能的细化,三个方向都可以细化,如此,所有的实现便一目了然,即使不看 Kafka 的实现,我们自己也可以想到一二点可以优化的地方。HashMap数据是无序的,是随机读写的。Producer、Broker 和 Consumer 使用相同的压缩算法,在 producer 向 Broker 写入数据,Consumer 向 Broker 读取数据时甚至可以不用解压缩,最终在 Consumer Poll 到消息时才解压,这样节省了大量的网络和磁盘开销。原创 2023-10-31 10:41:25 · 397 阅读 · 0 评论 -
Kafka面试小结三:kafka为什么partition只能由一个消费者组内的一个消费者消费
1. 如果kafka 允许1个partition的数据可以被同组中多个consumer消费,那么多个消费者必然要共同维护同一个 offset,因为这个offset影响数据消费的准确性(消息重复或漏消息),所以offset要做到强一致性。2.让同组的多个消费者消费同一个partition,其目的就是为了提高并发度。kakfa设计partition的初衷之一就是为了提高并发度,还有个目的是综合利用各个独立物理机的能力。原创 2023-10-20 15:06:03 · 1157 阅读 · 1 评论 -
Kafka面试小结二:kafka分布式面试题
Kafka采用了分布式存储和分区机制,使得不同的数据分散存储在不同的节点上,并可水平扩展,从而实现高吞吐量。此外,Kafka还采用基于磁盘的存储方式,较少使用内存,因此可以存储更大量的数据。Kafka是一个开源的分布式流处理平台,主要用于处理高吞吐量的数据流和消息队列系统。相比其他消息队列系统,Kafka最大的优势在于它的高吞吐量和可靠性。Kafka的分区机制是指将数据划分为多个分区,每个分区存储在不同的节点上。每个分区中的消息是有序的,因此可以保证消息的顺序性,同时还可以提高并发处理的能力。原创 2023-10-20 14:42:42 · 54 阅读 · 1 评论 -
Kafka面试小结四:kafak 确认机制ack的解答
ACK = 1:生产者发送数据,是需要等待leader的应答,如果应答完成,才能发送下一条message,是不关心follower是否pull完成,是否接收成功的。这样,虽说性能会慢些,但是数据会比较安全。可但是,在leader保存完数据后,突然leader所在的broker down掉了,此时的follower还没来得及从leader那儿pull数据,那么这个数据就会丢失。当生产者发送数据后,需要等待所有的副本的应答,包括leader+follower,这种方式是最安全的,但同时也是性能最差的。原创 2023-10-20 15:06:59 · 208 阅读 · 1 评论 -
Kafka面试小结一:Kafka如何保证消息不丢失?
在消费端,Kafka通常不会出现消息丢失的情况。如果发生消息丢失,可以调offset来实现消息的重新消费。以上信息仅供参考,可以查阅Kafka相关的文档和书籍获取更多信息。原创 2023-09-16 21:27:01 · 785 阅读 · 1 评论