转自:https://www.cnblogs.com/threecha/p/13737421.html 从以下方面对kafka面试进行总结:基本原理架构/项目实践/生产者/消费者/协调者/存储层/控制器 follower如何与leader同步数据 kafka节点之间消息如何备份的 kafka消息是否会丢失为什么 kafka的lead选举机制是什么 kafka 的消息保障方式有那些 项目实践 ACK 0 PartitionNum 简单讲下生产者的工作流程 1.主线程将消息封装到ProducerRecord[partition/key/value/key/时间戳] 2.client对ProducerRecord进行序列化 3. 消费者消费的分区数量出现变化 消费者组中的消费者数量发生变化 消费者什么时候会再次加入消费者组 消费者只有在出现reblance的时候会出现再次加入消费者,分为如下步骤1.消费者准备好自身状态2.和协调者发送加入消费者组的请求3. 实战 kafka技术内幕 kafka在公司项目实践
kafka、rabbitMQ等来实现推送更新Redis! 一张自增表里面总共有 7 条数据,删除了最后 2 条数据,重启 MySQL 数据库,又插入了一条数据,此时 id 是几? 3.ListIterator和Iterator都有hasNext()和next()方法,可以实现顺序向后遍历,但是ListIterator有hasPrevious()和previous()方法,可以实现逆向 优化的key大小 尽可能使用Hash,hash占用空间少; 选择内存占用和效率更好的数据结构zipList kafka 有几种数据保存策略 Kafka Broker默认的消息保留策略是:要么保留一定时间
Kafka对消息保存时根据Topic进行归类,发送消息者成为Producer,消息接受者成为Consumer,此外kafka集群有多个kafka实例组成,每个实例(server)称为broker。 Kafka旨在提供如下 3 特性 提供一套API实现生产者和消费者 降低网络传输和磁盘存储开销 实现高伸缩性架构 4 流处理 随Kafka不断完善,Jay等大神们意识到将其开源是个非常棒的主意,因此在2011 Kafka社区于0.10.0.0版本正式推出了流处理组件Kafka Streams,也正是从这个版本开始,Kafka正式“变身”为分布式的流处理平台,而不仅仅是消息引擎系统。 相反地,Kafka则不是这样,因为所有的数据流转和计算都在Kafka内部完成,故Kafka可以实现端到端的精确一次处理语义 举个例子,使用Kafka计算某网页的PV——我们将每次网页访问都作为一个消息发送的 Kafka能够被用作分布式存储系统 Kafka作者之一Jay Kreps曾经专门写过一篇文章阐述为什么能把Kafka用作分布式存储。
3、 削峰 假设双十一我买了不同店里的各种商品,而恰巧这些店发货的快递都不一样,有中通、圆通、申通、各种通等……更巧的是他们都同时到货了! 问题3:简单说一下ack机制 ack:producer收到多少broker的答复才算真的发送成功 0表示producer无需等待leader的确认(吞吐最高、数据可靠性最差) 1代表需要leader确认写入它的本地 条件1:有新的consumer加入 条件2:旧的consumer挂了 条件3:coordinator挂了,集群选举出新的coordinator 条件4:topic的partition新加 条件5:consumer 要保证 Consumer 实例在被判定为 “dead” 之前,能够发送至少 3 轮的心跳请求,即 session.timeout.ms >= 3 * heartbeat.interval.ms。 问题7.4:kafka一次reblance大概要多久 1个Topic,10个partition,3个consumer 测试结果 经过几轮测试发现每次rebalance所消耗的时间大概在 80ms~100ms
第 7 章 Kafka 面试题 7.1 面试问题 Kafka 中的 ISR(InSyncRepli)、OSR(OutSyncRepli)、AR(AllRepli)代表什么? Kafka 中的 HW、LEO 等分别代表什么? Kafka 中是怎么体现消息顺序性的? Kafka 中的分区器、序列化器、拦截器是否了解?它们之间的处理顺序是什么? 1)会在 zookeeper 中的/brokers/topics 节点下创建一个新的 topic 节点,如:/brokers/topics/first 2)触发 Controller 的监听程序 3) Kafka 有内部的 topic 吗?如果有是什么?有什么所用? Kafka 分区分配的概念? 简述 Kafka 的日志目录结构? 如果我指定了一个 offset,Kafka Controller 怎么查找到对应的消息? 聊一聊 Kafka Controller 的作用? Kafka 中有那些地方需要选举?
什么是Kafka? Kafka中有哪几个组件? 主题(Topic):Kafka主题是一堆或一组消息。 生产者(Producer):在Kafka,生产者发布通信以及向Kafka主题发布消息。 Kafka系统工具有哪些类型? Kafka迁移工具:它有助于将代理从一个版本迁移到另一个版本。 Mirror Maker:Mirror Maker工具有助于将一个Kafka集群的镜像提供给另一个。 Kafka可以接收的最大消息大小约为1000000字节。 Kafka的优点有那些? 高吞吐量:我们在Kafka中不需要任何大型硬件,因为它能够处理高速和大容量数据。 低延迟:Kafka可以轻松处理这些消息,具有毫秒级的极低延迟,这是大多数新用例所要求的。 容错:Kafka能够抵抗集群中的节点/机器故障。 耐久性:由于Kafka支持消息复制,因此消息永远不会丢失。
Kafka的设计模式主要基于事务日志设计。 2. Kafka中有哪几个组件? 主题:Kafka主题是一堆或一组消息。 生产者:在Kafka,生产者发布通信以及向Kafka主题发布消息。 消费者:Kafka消费者订阅了一个主题,并且还从主题中读取和处理消息。 经纪人:在管理主题中的消息存储时,我们使用Kafka Brokers。 3. 解释偏移的作用。 为什么Kafka技术很重要? 答:Kafka有一些优点,因此使用起来很重要: 高吞吐量:我们在Kafka中不需要任何大型硬件,因为它能够处理高速和大容量数据。 它可以帮助: 1.轻松推送记录 2.可以存储大量记录,而不会出现任何存储问题 3.它还可以在记录进入时对其进行处理。 14. 你能用Kafka做什么? A,B 进行轮询的分区有: T1 0 T1 1 T1 2 T2 0 T2 1 T2 3 Range : 按主题划分,先考虑谁订阅了这个主题,然后再进行划分 39. Kafka 如何保证数据的顺序性?
kafka事务机制 kafka的事务机制,是kafka实现端到端有且仅有一次语义(end-to-end EOS)的基础;事务涉及到 transactional producer 和transactional 的事务机制,在底层依赖于幂等生产者,幂等生产者是kafka事务的必要不充分条件; 事实上,开启kafka事务时,kafka会自动开启幂等生产者; kafka事务支持的设计原理 Transaction Coordinator log是kakfa的一个内部topic, 所以kafka可以通过内部的复制协议和选举机制(replication protocol and leader election processes),来确保 Transaction Coordinator还负责将事务写入kafka内部的一个topic,这样即使整个服务重启,由于事务状态得到保存,正在进行的事务状态可以得到恢复,从而继续进行; kafka事务机制下读写流程 全局一致的transactional.id维护 transactional.id在kafka的事务机制中扮演了关键的角色,kafka正是基于该参数来过滤掉僵尸生产者的 (fencing out zombies
message.send.max.retries 默认值:3,消息发送最大尝试次数。 retry.backoff.ms 默认值:300,每次尝试增加的额外的间隔时间。 关于 ISR,还有一个常见的面试题目是如何判断副本是否应该属于 ISR。 所以理解这些配置背后的实现原理,可以让我们在实践中懂得如何使用和优化 Kafka。既可面试造火箭,也可以实战造火箭。 寻道时间越短,I/O 操作越快,目前磁盘的平均寻道时间一般在 3-15ms。 旋转延迟:Trotation 是指盘片旋转将请求数据所在的扇区移动到读写磁盘下方所需要的时间。 ” 零拷贝 “哈哈,这个我面试被问到过。可惜答得一般般,唉。 ” 什么是零拷贝?
Angular v8+面试系列 Angular 面试题汇总1-基本知识 Angular 面试题汇总2-Component/Service Angular 面试题汇总3-单元测试 目录 Angular ---- Angular v8+面试系列 Angular 面试题汇总1-基本知识 Angular 面试题汇总2-Component/Service Angular 面试题汇总3-单元测试 版权声明
在接触kafka之前,我们一般用soa模式由负责一块业务功能开发的程序员提供一套完整的对外业务操作api,就可以实现程序员各自独立工作,各管自己的一亩二分地。 这个时候kafka应该能在解决方案里发挥特殊作用:如果我们把kafka引入到业务模块集成,业务模块之间通过消息/事件队列event-queue进行沟通就可以实现更高程度的、更高效率的、交易事务类型的业务集成了 以此类推,其它类型的交易平台如支付、商品信息、商品调拨、商品收发等等都可以成为独立的业务模块,通过kafka把它们集成为一个整体。 在下篇我们可以讨论一下用alpakka-kafka实现这个案例所需要考虑的一些技术方案。
Main(string[] args) { KafkaService.KAFKA_SERVERS = "kafka1:9091,kafka2:9092,kafka3 Main(string[] args) { KafkaService.KAFKA_SERVERS = "kafka1:9091,kafka2:9092,kafka3 3 基于DotNetCore.CAP的示例 模拟场景说明 假设我们有两个微服务,一个是Catalog微服务,一个是Basket微服务,当Catalog微服务产生了Product价格更新的事件,就会将其发布到 authSource=admin"); x.UseKafka("kafka1:9091,kafka2:9092,kafka3:9093"); }); } 新建一个ProductController 参考资料 阿星Plus,《.NET Core下使用Kafka》 麦比乌斯皇,《.NET使用Kafka小结》 极客时间,胡夕《Kafka核心技术与实战》 B站,尚硅谷《Kafka 3.x入门到精通教程》
Kafka Kafka集群leader选举 Kafka创建副本的2种模式——同步复制和异步复制 同步复制流程 异步复制流程 Kafka判断一个broker节点是否存活 Kafka生产者发送消息确认机制( ack机制) KafkaISR机制 leader如何动态维护ISR Kafka集群leader选举 在kafka集群中,第一个启动的broker会在zk中创建一个临时节点/controller让自己成为控制器 Kafka创建副本的2种模式——同步复制和异步复制 Kafka动态维护了一个同步状态的副本的集合(a set of In-Sync Replicas),简称ISR,在这个集合中的节点都是和leader 既然kafka支持副本模式,那么其中一个Broker里的挂掉,一个新的leader就能通过ISR机制推选出来,继续处理读写请求。 生产者没有收到leader的ack回应会重试投递,会造成数据重复 kafKa消费消息主要是依靠偏移量进行消费数据的,偏移量是一个不断自增的整数值,当发生重平衡的时候,便于用来恢复数据。
本篇给大家总结了20道Kafka知识点或者说面试题,持续更新中... 1.kafka的3个关键功能? 发布和订阅记录流,类似于消息队列或企业消息传递系统。 以容错的持久方式存储记录流。 处理记录流。 2.kafka通常用于两大类应用? 建立实时流数据管道,以可靠地在系统或应用程序之间获取数据 构建实时流应用程序,以转换或响应数据流 3.kafka特性? 消息持久化 高吞吐量 扩展性 多客户端支持 Kafka Streams 安全机制 数据备份 轻量级 消息压缩 4.kafka的5个核心Api? Kafka集群中,一个kafka实例被称为一个代理(Broker)节点。 6.什么是Producer(生产者)? 消息的生产者被称为Producer。 设置 replication.factor >= 3。 设置 min.insync.replicas > 1。
/kafka-topics.sh --bootstrap-server 127.0.0.1:9092 --create --replication-factor 3 --partitions 3 -- : Replication factor: 3 larger than available brokers: 1. /kafka-topics.sh --bootstrap-server 127.0.0.1:9092 --create --replication-factor 1 --partitions 3 - (default: 3) --metadata-expiry-ms <Long: metadata The period of time in milliseconds expiration /kafka-topics.sh --bootstrap-server 127.0.0.1:9092 --create --replication-factor 1 --partitions 3 -
比串行提高了3倍,比并行提高了两倍。 2.2应用解耦 场景说明:用户下单后,订单系统需要通知库存系统。传统的做法是,订单系统调用库存系统的接口。 架构简化如下 日志采集客户端,负责日志数据采集,定时写受写入Kafka队列 Kafka消息队列,负责日志数据的接收,存储和转发 日志处理应用:订阅并消费kafka队列中的日志数据 2.5消息通讯 (3)消息将应用解耦的同时,带来了数据一致性问题,可以采用最终一致性方式解决。比如主数据写入数据库,扩展应用根据消息队列,并结合数据库方式实现基于消息队列的后续处理。 Kafka相关概念 Broker Kafka集群包含一个或多个服务器,这种服务器被称为broker[5] Topic 每条发布到Kafka集群的消息都有一个类别,这个类别被称为Topic。 Producer 负责发布消息到Kafka broker Consumer 消息消费者,向Kafka broker读取消息的客户端。
点击关注公众号,Java干货及时送达 前言 本文针对解决Kafka不同Topic之间存在一定的数据关联时的顺序消费问题。 1、问题引入 kafka的顺序消费一直是一个难以解决的问题,kafka的消费策略是对于同Topic同Partition的消息可保证顺序消费,其余无法保证。 另外,Kafka 系列面试题和答案全部整理好了,微信搜索Java技术栈,在后台发送:面试,可以在线阅读。 点击关注公众号,Java干货及时送达 3、实现方案 消息发送: kafkaTemplate.send("TOPIC_INSERT", "1"); kafkaTemplate.send("TOPIC_UPDATE ", "1"); 最新 Kafka 面试题整理好了,大家可以在Java面试库小程序在线刷题。
消息备份 Kafka允许同⼀个Partition存在多个消息副本(Replica),每个Partition的副本通常由1个Leader及0个以上的Follower组成,⽣产者将 消息直接发往对应Partition 的Leader,Follower会周期地向Leader发送同步请求,Kafka的Leader机制在保障数据⼀致性地同时降低了了 消息备份的复杂度; 同⼀Partition的Replica不应存储在同一个 为了做好负载均衡并提⾼容错能力,Kafka会尽量将所有的Partition以及各Partition的副本均匀地分配到整个集群上; ISR机制 kafka中每一个主题又进一步划分成若干个分区。 副本的概念实际上是在分区层级下定义的,每个分区配置有多若干个副本;所谓副本,本质上就是一个只能追加写消息的提交日志,根据kafka副本机制的定义,同一个分区下的所有副本保存着相同的消息序列,这些副本分散的保存在不同的 Broker上,从而能够对抗部分Broker宕机带来的数据不可用; 在kafka分区中的副本机制中,又分了Leader节点和Follower节点,消息会写到Leader节点中,由Leader节点将数据同步给
生产者、broker、消费者这3个角色在处理消息的过程中都会在链路中增加相应的信息,将这些信息汇聚、处理之后就可以查询任意消息的状态,进而为生产环境中的故障排除提供强有力的数据支持。 设置 replication.factor >= 3。这也是 Broker 端的参数。其实这里想表述的是,最好将消息多保存几份,毕竟目前防止消息丢失的主要机制就是冗余。 可以这么说,session.timeout.ms 决定了消费者存活性的时间间隔 3. (提示:消费者协调器和消费组协调器)Kafka中的事务是怎么实现的(这题我去面试6加被问4次,照着答案念也要念十几分钟,面试官简直凑不要脸。 如果这时候来了一个消息 msg2,那么它会被转发到分区 3 上。分区 3 上面没有积攒什么数据,所以消费者 3 直接就消费了这个消息。 这时候我们发现,本来 msg1 应该先于 msg2 被消费。
3、Kafka名词解释以及工作方式 Broker :一台kafka服务器就是一个broker。一个集群由多个broker组成。一个broker可以容纳多个topic。 正常情况下,kafka 会为每个 Consumer 平均的分配 5 个分区。这个分配的过程就是 Rebalance。 触发 Rebalance 的时机 Rebalance 的触发条件有3个。 在这里插入图片描述 等到Broker3的GC完成之后,仍会认为自己是集群的controller,在Broker3的眼中好像什么都没有发生一样。 kafka支持分区数增加 例如我们可以使用 bin/kafka-topics.sh -alter --topic --topic topic-name --partitions 3 命令将原本分区数为1 得topic-name设置为3。