成都网站建设q479185700棒,长沙人才市场招聘信息,vi设计说明模板,最专业的企业营销型网站建设公司JAVA面试题--Kafka#xff08;最新最全#xff09; 目录概述需求#xff1a;设计思路实现思路分析1.URL管理2.网页下载器3.爬虫调度器4.网页解析器5.数据处理器拓展实现性能参数测试#xff1a;参考资料和推荐阅读)Survive by day and develop by night. talk for import b…
JAVA面试题--Kafka最新最全 目录概述需求设计思路实现思路分析1.URL管理2.网页下载器3.爬虫调度器4.网页解析器5.数据处理器拓展实现性能参数测试参考资料和推荐阅读)Survive by day and develop by night. talk for import biz , show your perfect code,full busyskip hardness,make a better result,wait for change,challenge Survive. happy for hardess to solve denpendies. 目录 概述
Java 消费者
需求
设计思路
1.为什么要使用 kafka为什么要使用消息队列 1.为什么要使用 kafka为什么要使用消息队列 2.Kafka中的ISR、AR又代表什么ISR的伸缩又指什么 3.kafka中的broker 是干什么的 4.kafka中的 zookeeper 起到什么作用可以不用zookeeper么 5.kafka follower如何与leader同步数据 6.什么情况下一个 broker 会从 ISR 中被踢出去 7.kafka 为什么那么快 8.kafka producer如何优化打入速度 9.kafka producer 打数据ack 为 0 1 -1 的时候代表啥 设置 -1 的时候什么情况下leader 会认为一条消息 commit 了 10.kafka unclean 配置代表啥会对 spark streaming 消费有什么影响 11.如果leader crash时ISR为空怎么办 12.kafka的message格式是什么样的 13.kafka中consumer group 是什么概念 14.Kafka中的消息是否会丢失和重复消费 15.为什么Kafka不支持读写分离 16.Kafka中是怎么体现消息顺序性的 17.kafka如何实现延迟队列 18.什么是消费者组? 19.解释下 Kafka 中位移(offset)的作用。 20.阐述下 Kafka 中的领导者副本(Leader Replica)和追随者副本 (Follower Replica)的区别。 21.如何设置 Kafka 能接收的最大消息的大小? 22.监控 Kafka 的框架都有哪些? 23.Broker 的 Heap Size 如何设置 24.如何估算 Kafka 集群的机器数量? 25.Leader 总是 -1怎么破? 26.LEO、LSO、AR、ISR、HW 都表示什么含义? 27.Kafka 能手动删除消息吗? 28.consumer_offsets 是做什么用的? 29.分区 Leader 选举策略有几种? 30.Kafka 的哪些场景中使用了零拷贝(Zero Copy)? 31.如何调优 Kafka? 32.Controller 发生网络分区(Network Partitioning)时Kafka 会怎么样? 33.Java Consumer 为什么采用单线程来获取消息? 34.简述 Follower 副本消息同步的完整流程。
缓冲和削峰上游数据时有突发流量下游可能扛不住或者下游没有足够多的机器来保证冗余kafka在中间可以起到一个缓冲的作用把消息暂存在kafka中下游服务就可以按照自己的节奏进行慢慢处理。
解耦和扩展性项目开始的时候并不能确定具体需求。消息队列可以作为一个接口层解耦重要的业务流2.Kafka中的ISR、AR又代表什么ISR的伸缩又指什么 程。只需要遵守约定针对数据编程即可获取扩展能力。
冗余可以采用一对多的方式一个生产者发布消息可以被多个订阅topic的服务消费到供多个毫无关联的业务使用。 健壮性消息队列可以堆积请求所以消费端业务即使短时间死掉也不会影响主要业务的正常进行。 异步通信很多时候用户不想也不需要立即处理消息。消息队列提供了异步处理机制允许用户把一个消息放入队列但并不立即处理它。想向队列中放入多少消息就放多少然后在需要的时候再去处理它们。 2.Kafka中的ISR、AR又代表什么ISR的伸缩又指什么 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, 存入OSROutof-Sync Replicas列表新加入的follower也会先存放在OSR中。ARISROSR。
3.kafka中的broker 是干什么的
broker 是消息的代理Producers往Brokers里面的指定Topic中写消息Consumers从Brokers里面拉取指定Topic的消息然后进行业务处理broker在中间起到一个代理保存消息的中转站。
4.kafka中的 zookeeper 起到什么作用可以不用zookeeper么 zookeeper 是一个分布式的协调组件早期版本的kafka用zk做meta信息存储consumer的消费状态group的管理以及 offset的值。考虑到zk本身的一些因素以及整个架构较大概率存在单点问题新版本中逐渐弱化了zookeeper的作用。新的consumer使用了kafka内部的group coordination协议也减少了对zookeeper的依赖但是broker依然依赖于ZKzookeeper 在kafka中还用来选举controller 和 检测broker是否存活等等。
5.kafka follower如何与leader同步数据
Kafka的复制机制既不是完全的同步复制也不是单纯的异步复制。完全同步复制要求All Alive Follower都复制完这条消息才会被认为commit这种复制方式极大的影响了吞吐率。而异步复制方式下Follower异步的从Leader复制数据数据只要被Leader写入log就被认为已经commit这种情况下如果leader挂掉会丢失数据kafka使用ISR的方式很好的均衡了确保数据不丢失以及吞吐率。Follower可以批量的从Leader复制数据而且Leader充分利用磁盘顺序读以及send file(zero copy)机制这样极大的提高复制性能内部批量写磁盘大幅减少了Follower与Leader的消息量差。
6.什么情况下一个 broker 会从 ISR 中被踢出去
leader会维护一个与其基本保持同步的Replica列表该列表称为ISR(in-sync Replica)每个Partition都会有一个ISR而且是由leader动态维护 如果一个follower比一个leader落后太多或者超过一定时间未发起数据复制请求则leader将其重ISR中移除 。
7.kafka 为什么那么快
Cache Filesystem Cache PageCache缓存
Cache Filesystem Cache PageCache缓存 顺序。 由于现代的操作系统提供了预读和写技术磁盘的顺序写大多数情况下比随机写内存还要快。 Zero-copy。零拷技术减少拷贝次数 Batching of Messages 批量量处理。合并小的请求然后以流的方式进行交互直顶网络上限。 Pull 拉模式。使用拉模式进行消息的获取消费与消费端处理能力相符。
8.kafka producer如何优化打入速度
增加线程
提高 batch.size 增加更多 producer 实例
增加 partition 数
设置 acks-1 时如果延迟增大可以增大 num.replica.fetchersfollower 同步数据的线程数来调解 跨数据中心的传输增加 socket 缓冲区设置以及 OS tcp 缓冲区设置。
9.kafka producer 打数据ack 为 0 1 -1 的时候代表啥 设置 -1 的时候什么情况下leader 会认为一条消息 commit 了 1默认数据发送到Kafka后经过leader成功接收消息的的确认就算是发送成功了。在这种情况下如果leader宕机了则会丢失数据。 0生产者将数据发送出去就不管了不去等待任何返回。这种情况下数据传输效率最高但是数据可靠性确是最低的。 -1producer需要等待ISR中的所有follower都确认接收到数据后才算一次发送完成可靠性最高。当ISR中所有Replica都向Leader发送ACK时leader才commit这时候producer才能认为一个请求中的消息都commit了。
10.kafka unclean 配置代表啥会对 spark streaming 消费有什么影响 unclean.leader.election.enable 为true的话意味着非ISR集合的broker 也可以参与选举这样有可能就会丢数据spark streaming在消费过程中拿到的 end offset 会突然变小导致 spark streaming job挂掉。如果unclean.leader.election.enable参数设置为true就有可能发生数据丢失和数据不一致的情况Kafka的可靠性就会降低而如果unclean.leader.election.enable参数设置为falseKafka的可用性就会降低。
11.如果leader crash时ISR为空怎么办 kafka在Broker端提供了一个配置参数unclean.leader.election,这个参数有两个值 true默认允许不同步副本成为leader由于不同步副本的消息较为滞后此时成为leader可能会出现消息不一致的情况。 false不允许不同步副本成为leader此时如果发生ISR列表为空会一直等待旧leader恢复降低了可用性。
一个Kafka的Message由一个固定长度的header和一个变长的消息体body组成。 header部分由一个字节的magic(文件格式)和四个字节的CRC32(用于判断body消息体是否正常)构成。 当magic的值为1的时候会在magic和crc32之间多一个字节的数据attributes(保存一些相关属性比如是否压缩、压缩格式等等)如果magic的值为0那么不存在attributes属性。 body是由N个字节构成的一个消息体包含了具体的key/value消息。 13.kafka中consumer group 是什么概念 同样是逻辑上的概念是Kafka实现单播和广播两种消息模型的手段。同一个topic的数据会广播给不同的group同一个group中的worker只有一个worker能拿到这个数据。换句话说对于同一个topic每个group都可以拿到同样的所有数据但是数据进入group后只能被其中的一个worker消费。group内的worker可以使用多线程或多进程来实现也可以将进程分散在多台机器上worker的数量通常不超过partition的数量且二者最好保持整数倍关系因为Kafka在设计时假定了一个partition只能被一个worker消费同一group内。
14.Kafka中的消息是否会丢失和重复消费
要确定Kafka的消息是否丢失或重复从两个方面分析入手消息发送和消息消费。
1消息发送
Kafka消息发送有两种方式同步sync和异步async默认是同步方式可通过producer.type属性进行配置。Kafka通过配置request.required.acks属性来确认消息的生产
Kafka消息发送有两种方式同步sync和异步async默认是同步方式可通过producer.type属性进行配置。Kafka通过配置request.required.acks属性来确认消息的生产
0—表示不进行消息接收是否成功的确认 1—表示当Leader接收成功时确认 -1—表示Leader和Follower都接收成功时确认 综上所述有6种消息生产的情况下面分情况来分析消息丢失的场景
1acks0不和Kafka集群进行消息接收确认则当网络异常、缓冲区满了等情况时消息可能丢失
2acks1、同步模式下只有Leader确认接收成功后但挂掉了副本没有同步数据可能丢失
2消息消费 Kafka消息消费有两个consumer接口Low-level API和High-level API
实现思路分析
1.URL管理
这里我们可以使用规则的数据结构来存储和转发。
2.网页下载器
下载器我们可以使用建立HTTP请求把界面的URL元素下载下来。实质就是 下载器。
3.爬虫调度器
爬虫调度器就是可以利用多线程机制进行调度似的更快的进行网页爬取。
4.网页解析器
这个也比较简单就是对网页元素进行解析通常利用JSONPxpath等技术进行网页分析。
5.数据处理器
在这个过程一般在数据存储和存储到mysql中或者进行其他逻辑判断等。
拓展实现
这里参考github:简单实现上述流程 入门级实现: : 部分源码实现. : 源码实现
性能参数测试
每秒大概18-20个请求主要用于网络IO操作耗费了不少时间。
参考资料和推荐阅读
爬虫框架的设计与实现之JAVA篇.主流爬虫框架的基本介绍.高拓展性的Java多线程爬虫框架reptile. 欢迎阅读各位老铁如果对你有帮助点个赞加个关注呗~