转自:https://www.cnblogs.com/threecha/p/13737421.html 从以下方面对kafka面试进行总结:基本原理架构/项目实践/生产者/消费者/协调者/存储层/控制器 有那些消息模型 队列模型和发布订阅 kafka使用消费者组统一了上面2种消息模型。 时间戳] 2.client对ProducerRecord进行序列化 3.根据分区策略确定分区[无key轮询有key murmur2(key) mod PartitionNum] 4.将消息放入缓存区[每一个分区对应一个双端队列 2.sender线程可以使用单线程迭代 消费者 什么是管理者 管理者是消费者组中的概念,用于对同一个消费者组中的所有消费者进行协调。 说下2种消费模式 消费模式可分为订阅模式和分配模式 我们项目中有4个分区,使用的订阅模式 设置了4个消费者。
(2)读取binlog后分析 ,利用消息队列,推送更新各台的redis缓存数据。 kafka、rabbitMQ等来实现推送更新Redis! 一张自增表里面总共有 7 条数据,删除了最后 2 条数据,重启 MySQL 数据库,又插入了一条数据,此时 id 是几? 2.ListIterator有add方法,可以向List中添加对象,而Iterator不能。 优化的key大小 尽可能使用Hash,hash占用空间少; 选择内存占用和效率更好的数据结构zipList kafka 有几种数据保存策略 Kafka Broker默认的消息保留策略是:要么保留一定时间 https://www.jianshu.com/p/7008d2a1e320 时间和大小不论那个满足条件,都会清空数据。
集群规划 node01 node02 node03 zk zk zk kafka kafka kafka 2、下载安装包并上传解压 通过以下地址进行下载安装包 node01 运行日志存放的路径 log.dirs=/export/servers/kafka_2.11-1.0.0/logs #topic 在当前 broker 上的分区个数 num.partitions=2 # server.properties 2>&1 & node02执行以下命令将kafka进程启动在后台 cd /export/servers/kafka_2.11-1.0.0 nohup bin/kafka-server-start.sh config/server.properties 2>&1 & node03执行以下命令将kafka进程启动在后台 cd /export/servers/kafka_2.11-1.0.0 nohup bin/kafka-server-start.sh config/server.properties 2>&1 & 三台机器也可以执行以下命令停止kafka集群 cd /export/servers/kafka
2、 异步 快递小哥打电话给我后需要一直在你楼下等着,直到我拿走你的快递他才能去送其他人的。快递小哥将快递放在小芳便利店后,又可以干其他的活儿去了,不需要等待你到来而一直处于等待状态。 问题2:Kafka中有哪几个组件? 主题:Kafka主题是一堆或一组消息。 生产者:在Kafka,生产者发布通信以及向Kafka主题发布消息。 如何判断节点是否存活 (1)节点必须可以维护和 ZooKeeper 的连接,Zookeeper 通过心跳机制检查每个节点的连 接 (2)如果节点是个 follower,他必须能及时的同步 leader 设置 heartbeat.interval.ms = 2s。 如果一定要做到顺序消费,肯定是可以的,但是这个浪费资源,因为kafka就是针对高并发大吞吐量而生,下面说一下顺序消费方案: 1、一个topic、一个partition、一个线程 2、一个topic、n个
第 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 并不支持主写从读,因为主写从读有 2 个很明 显的缺点: 数据一致性问题。数据从主节点转到从节点必然会有一个延时的时间窗口,这个时间 窗口会导致主从节点之间的数据不一致。
Kafka的设计模式主要基于事务日志设计。 2. Kafka中有哪几个组件? 主题:Kafka主题是一堆或一组消息。 生产者:在Kafka,生产者发布通信以及向Kafka主题发布消息。 它可以帮助: 1.轻松推送记录 2.可以存储大量记录,而不会出现任何存储问题 3.它还可以在记录进入时对其进行处理。 14. 你能用Kafka做什么? Kafka生产者客户端中使用了几个线程来处理?分别是什么? 2个,主线程和Sender线程。 Range 分区不会把主题看做一个整体进行划分 假设 有两个主题, T1(0,1,2), T2(0,1,2), 两个消费者组 (A,B) (C) A 消费者 订阅 T1 , B 订阅 T1, T2 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
Kafka 就是通过消费组的方式来实现消息 P2P 模式和广播模式。 Broker:服务代理节点。Broker 是 Kafka 的服务节点,即 Kafka 的服务器。 关于 ISR,还有一个常见的面试题目是如何判断副本是否应该属于 ISR。 所以理解这些配置背后的实现原理,可以让我们在实践中懂得如何使用和优化 Kafka。既可面试造火箭,也可以实战造火箭。 比如:7200rpm 的磁盘平均旋转延迟大约为 60*1000/7200/2 = 4.17ms,而转速为 15000rpm 的磁盘其平均旋转延迟为 2ms。 ” 零拷贝 “哈哈,这个我面试被问到过。可惜答得一般般,唉。 ” 什么是零拷贝?
Angular v8+面试系列 Angular 面试题汇总1-基本知识 Angular 面试题汇总2-Component/Service Angular 面试题汇总3-单元测试 目录 Angular 端到端测试(e2e) Angular中的测试有哪些种,基于哪些测试框架 Angular的测试主要包括单元测试(Unit Test)和端到端测试(e2e)。 端到端测试(e2e):基于protractor。protractor是Angular专用的e2e框架。 什么是Karma? 在Angular中有什么作用? 将依赖项加到providers中 TestBed.configureTestingModule({ providers: [YourDependencyService] }); 端到端测试(e2e ---- Angular v8+面试系列 Angular 面试题汇总1-基本知识 Angular 面试题汇总2-Component/Service Angular 面试题汇总3-单元测试 版权声明
背景 本节使用 docker-compose 来创建 kafka 容器。 2. --partitions 4 --zookeeper kafka_zookeeper_1:2181 --replication-factor 1 2、查看有哪些 topic $KAFKA_HOME/ bin/kafka-topics.sh kafka-topics --list --zookeeper kafka_zookeeper_1 3、查看 topic 详情 $KAFKA_HOME/bin/kafka-topics.sh 参数说明: --topic=test 指示了一个 topic 名称 --broker-list kafka_kafka_1:9092 指示了 kafka服务的地址 $KAFKA_HOME /bin/kafka-console-producer.sh --topic=topic123 --broker-list kafka_kafka_1:9092 2、接收信息 接收信息使用: kafka-console-consumer.sh
Kafka是分布式的,基于发布订阅的消息系统。 2 Broker(服务器端) Kafka的服务器端由被称为Broker的服务进程构成,即一个Kafka集群由多个Broker组成。 分区位移从0开始,假设一个生产者向一个空分区写入10条消息,则这10条消息的位移依次是0、1、2、…、9。 4 Topic 一个业务即一个Topic。 Kafka在后台还有定时任务会定期地检查老的日志段是否能够被删除,从而实现回收磁盘空间的目的。 这里再重点说说消费者。 点对点模型(Peer to Peer,P2P)和发布订阅模型。 在Kafka中实现这种P2P模型的方法就是引入了消费者组(Consumer Group)。所谓的消费者组,指的是多个消费者实例共同组成一个组来消费一组主题。
本篇给大家总结了20道Kafka知识点或者说面试题,持续更新中... 1.kafka的3个关键功能? 发布和订阅记录流,类似于消息队列或企业消息传递系统。 以容错的持久方式存储记录流。 处理记录流。 2.kafka通常用于两大类应用? 建立实时流数据管道,以可靠地在系统或应用程序之间获取数据 构建实时流应用程序,以转换或响应数据流 3.kafka特性? 消息持久化 高吞吐量 扩展性 多客户端支持 Kafka Streams 安全机制 数据备份 轻量级 消息压缩 4.kafka的5个核心Api? Kafka集群中,一个kafka实例被称为一个代理(Broker)节点。 6.什么是Producer(生产者)? 消息的生产者被称为Producer。 实际写入到kafka集群并且可以被消费者读取的数据。每条记录包含一个键、值和时间戳。 12.kafka适合哪些场景? 日志收集、消息系统、活动追踪、运营指标、流式处理、时间源等。
优点:控制了流量 缺点:会让流程变慢 2、Kafka核心概念 生产者:Producer 往Kafka集群生成数据消费者:Consumer 往Kafka里面去获取数据,处理数据、消费数据Kafka的数据是由消费者自己去拉去 服务器2(kafka2):创建目录topic_a-1: 服务器3(kafka3):创建目录topic_a-2: 7、Kafka二分查找定位数据 Kafka里面每一条消息,都有自己的offset 原理比较了解,尤其是网络设计部分 Reactor网络设计模式1: Reactor网络设计模式2: Reactor网络设计模式3: Kafka超高并发网络设计: 9、Kafka冗余副本保证高可用 zookeeper集群 hadoop1 hadoop2 hadoop3 kafka集群 理论上来讲,我们不应该把kafka的服务于zk的服务安装在一起。但是我们这儿服务器有限。 14.8 group coordinator原理 面试题:消费者是如何实现rebalance的?
在上一篇文章中,我分析了Kafka的请求、响应流程,但留下了Selector的疑点。 Selector 读完上一篇文章,我们应当理解了Kafka Selector在内部维护了一个java nio Selector,变量名叫nioSelector。 ? 外部向Kafka Selector注册SocketChannel,其实都是注册到了java Selector上。 而Kafka Selector又是通过调用java Selector,来收集触发了I/O事件的Socket,从而对其执行I/O。 ?
依赖 <dependency> <groupId>org.springframework.kafka</groupId> <artifactId>spring-kafka</artifactId > </dependency> 配置 spring: kafka: bootstrap-servers: 外网ip:9092 producer: retries: 0 batch-size: 16384 buffer-memory: 33554432 key-serializer: org.apache.kafka.common.serialization.StringSerializer value-serializer: org.apache.kafka.common.serialization.StringSerializer consumer: group-id value-deserializer: org.apache.kafka.common.serialization.StringDeserializer 生产者 消息实体类 @AllArgsConstructor
Pre Apache Kafka - ConsumerInterceptor 实战 (1) 用代码的方式实现了ConsumerInterceptor , 接下来我们用 配置的方式来实现一下 。 找原生的配置 Kafka Consumer的 都在 ConsumerConfig 找到 public static final String INTERCEPTOR_CLASSES_CONFIG = "interceptor.classes"; OK,继续 ---- 示例 配置文件 自定义 拦截器 package net.zf.module.system.kafka.interceptor org.apache.kafka.clients.consumer.ConsumerRecords; import org.apache.kafka.clients.consumer.OffsetAndMetadata 消费者的拦截器需要进行以下步骤: 首先,创建一个拦截器类,实现Kafka的ConsumerInterceptor接口,定义拦截器的逻辑。
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消费消息主要是依靠偏移量进行消费数据的,偏移量是一个不断自增的整数值,当发生重平衡的时候,便于用来恢复数据。
1、问题引入 kafka的顺序消费一直是一个难以解决的问题,kafka的消费策略是对于同Topic同Partition的消息可保证顺序消费,其余无法保证。 另外,Kafka 系列面试题和答案全部整理好了,微信搜索Java技术栈,在后台发送:面试,可以在线阅读。 2、解决思路 现有Topic-insert和Topic-update,数据唯一标识为id,对于id=1的数据而言,要保证Topic-insert消费在前,Topic-update消费在后。 使用synchronized进行加锁的话,会影响无关联的insert和update的数据消费能力,如id=1的insert和id=2的update,在synchronized的情况下,无法并发处理,这是没有必要的 面试题整理好了,大家可以在Java面试库小程序在线刷题。
1 什么是kafka Kafka是分布式发布-订阅消息系统,它最初是由LinkedIn公司开发的,之后成为Apache项目的一部分,Kafka是一个分布式,可划分的,冗余备份的持久性的日志服务,它主要用于处理流式数据 2 为什么要使用 kafka,为什么要使用消息队列 缓冲和削峰:上游数据时有突发流量,下游可能扛不住,或者下游没有足够多的机器来保证冗余,kafka在中间可以起到一个缓冲的作用,把消息暂存在kafka中 ; (2)acks=1、同步模式下,只有Leader确认接收成功后但挂掉了,副本没有同步,数据可能丢失; 2、消息消费 Kafka消息消费有两个consumer接口,Low-level API和High-level Kafka 并不支持主写从读,因为主写从读有 2 个很明 显的缺点: (1)数据一致性问题。数据从主节点转到从节点必然会有一个延时的时间窗口,这个时间 窗口会导致主从节点之间的数据不一致。 (2)延时问题。类似 Redis 这种组件,数据从写入主节点到同步至从节点中的过程需要经 历网络→主节点内存→网络→从节点内存这几个阶段,整个过程会耗费一定的时间。