Java面试题 -Kafka

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: Java面试题 -Kafka
1. 说说kafka:

1.消息分类按不同类别,分成不同的Topic,Topic⼜拆分成多个partition,每个partition均衡分散到不同的服务器(提⾼并发访问的能⼒)。

2.消费者按顺序从partition中读取,不⽀持随机读取数据,但可通过改变保存到zookeeper中的offset位置实现从任意位置开始读取。

3.服务器消息定时清除(不管有没有消费)

4.每个partition还可以设置备份到其他服务器上的个数以保证数据的可⽤性。通过Leader,Follower⽅式。

5.zookeeper保存kafka服务器和客户端的所有状态信息.(确保实际的客户端和服务器轻量级)

6.在kafka中,⼀个partition中的消息只会被group中的⼀个consumer消 费;每个group中consumer消息消费互相独⽴;我们可以认为⼀个group是⼀个"订阅"者,⼀个Topic中的每个partions,只会被⼀个"订阅者"中的⼀个consumer消费,不过⼀个consumer可以消费多个partitions中的消息。

7.如果所有的consumer都具有相同的group,这种情况和queue模式很像;消息将会在consumers之间负载均衡。

8.如果所有的consumer都具有不同的group,那这就是"发布-订阅";消息将

会⼴播给所有的消费者。

9.持久性,当收到的消息时先buffer起来,等到了⼀定的阀值再写⼊磁盘⽂件,减少磁盘IO.在⼀定程度上依赖OS的⽂件系统(对⽂件系统本身优化⼏乎不可能)

10.除了磁盘IO,还应考虑⽹络IO,批量对消息发送和接收,并对消息进⾏压缩。

11.在JMS实现中,Topic模型基于push⽅式,即broker将消息推送给consumer端.不过在kafka中,采⽤了pull⽅式,即consumer在和broker建⽴连接之后,主动去pull(或者说fetch)消息;这种模式有些优点,⾸先consumer端可以根据⾃⼰的消费能⼒适时的去fetch消息并处理,且可以控制消息消费的进度(offset);此外,消费者可以良好的控制消息消费的数量,batch fetch。

12.kafka⽆需记录消息是否接收成功,是否要重新发送等,所以kafka的producer是⾮常轻量级的,consumer端也只需要将fetch后的offset位置注册到zookeeper,所以也是⾮常轻量级的.

kafka使⽤场景:

  • 对于⼀些常规的消息系统,kafka是个不错的选择;partitons/replication和容错,可以使kafka具有良好的扩展性和性能优势。不过到⽬前为⽌,我们应该很清楚认识到,kafka并没有提供JMS中的"事务性"“消息传输担保(消息确认机制)”"消息分组"等企业级特性;
  • kafka只能使⽤作为"常规"的消息系统,在⼀定程度上,尚未确保消息的发送与接收绝对可靠(⽐如,消息重发,消息发送丢失等)
  • kafka的特性决定它⾮常适合作为"⽇志收集中⼼";application可以将操作⽇志"批量""异步"的发送到kafka集群中,⽽不是保存在本地或者DB中;kafka可以批量提交消息/压缩消息等,这对producer端⽽⾔,⼏乎感觉不到性能的开⽀.
  • consumer端采⽤批量fetch⽅式,此时consumer端也可以使hadoop等其他系统化的存储和分析系统。
2 . kafka和RabbitMQ区别:
  1. RabbitMQ,遵循AMQP协议,由内在⾼并发的erlanng语⾔开发,⽤在实时的对可靠性要求⽐较⾼的消息传递上(有消息确认机制)。
  2. kafka是Linkedin于2010年12⽉份开源的消息发布订阅系统,它主要⽤于处理活跃的流式数据,⼤数据量的数据处理上(⽆消息确认机制,但吞吐量⾼),kafka⽤zk做集群负载均衡。
3. 项⽬中哪⾥⽤到了kafka,它有什么特性?

场景:

  • ⼤数据部⻔流数据处理;
  • elk;

特性:

  • 它被设计为⼀个分布式系统,易于向外扩展;
  • 它同时为发布和订阅提供⾼吞吐量;
  • 它⽀持多订阅者,当失败时能⾃动平衡消费者;
  • 它将消息持久化到磁盘,因此可⽤于批量消费,例如ETL,以及实时应⽤程序。
4. kafka数据分区和消费者的关系,kafka的数据offset读取流程,kafka内部如何保证顺序,结合外部组件如何保证消费者的顺序?

kafka数据分区和消费者的关系

  • 1个partition只能被同组的⼀个consumer消费,同组的consumer则起到均衡效果。

kafka的数据offset读取流程:

  1. 连接ZK集群,从ZK中拿到对应topic的partition信息和partition的Leader的相关信息
  2. 连接到对应Leader对应的broker
  3. consumer将⾃⼰保存的offset发送给Leader
  4. Leader根据offset等信息定位到segment(索引⽂件和⽇志⽂件)
  5. 根据索引⽂件中的内容,定位到⽇志⽂件中该偏移量对应的开始位置读取相应⻓度的数据并返回给consumer

kafka内部如何保证顺序:

kafka只能保证partition内是有序的,但是partition间的有序是没办法的。爱奇艺的搜索架构,就是从业务上把需要有序的打到同⼀个partition。

5. kafka⼯作流程?

Apache Kafka是分布式发布-订阅消息系统。它最初由LinkedIn公司开发,之后成为Apache项⽬的⼀部分。Kafka是⼀种快速、可扩展的、设计内在就是分布式的,分区的和可复制的提交⽇志服务。

a. ⽣产者定期向主题发送消息。

b. Kafka代理存储为该特定主题配置的分区中的所有消息。 它确保消息在分区之间平等共享。 如果⽣产者发送两个消息并且有两个分区,Kafka将在第⼀分区中存储⼀个消息,在第⼆分区中存储第⼆消息。

c. 消费者订阅特定主题。

d. ⼀旦消费者订阅主题,Kafka将向消费者提供主题的当前偏移,并且还将偏移保存在Zookeeper系综中。

e. 消费者将定期请求Kafka(如100 Ms)新消息。

f. ⼀旦Kafka收到来⾃⽣产者的消息,它将这些消息转发给消费者。

g. 消费者将收到消息并进⾏处理。

h. ⼀旦消息被处理,消费者将向Kafka代理发送确认。

i. ⼀旦Kafka收到确认,它将偏移更改为新值,并在Zookeeper中更新它。 由于偏移在Zookeeper中维护,消费者可以正确地读取下⼀封邮件,即使在服务器暴⼒期间。

j. 以上流程将重复,直到消费者停⽌请求。

k. 消费者可以随时回退/跳到所需的主题偏移量,并阅读所有后续消息。

目录
相关文章
|
1天前
|
SQL Java
java面试题笔试常见选择题大全含答案
java面试题笔试常见选择题大全含答案
|
1天前
|
SQL JavaScript Java
java程序员面试题大全含答案(2018--2019)
java程序员面试题大全含答案(2018--2019)
|
1天前
|
设计模式 开发框架 Java
java设计模式面试题大全含答案
java设计模式面试题大全含答案
|
1天前
|
设计模式 SQL JavaScript
java面试宝典全套含答案
java面试宝典全套含答案
|
1天前
|
存储 Java
java面试题大全带答案_面试题库_java面试宝典2018
java面试题大全带答案_面试题库_java面试宝典2018
|
1天前
|
缓存 安全 Java
Java线程面试题含答案
Java线程面试题含答案
|
1天前
|
存储 设计模式 Java
java实习生面试题_java基础面试_java面试题2018及答案_java面试题库
java实习生面试题_java基础面试_java面试题2018及答案_java面试题库
|
15小时前
|
Java Android开发 Kotlin
Android面试题:App性能优化之Java和Kotlin常见的数据结构
Java数据结构摘要:ArrayList基于数组,适合查找和修改;LinkedList适合插入删除;HashMap1.8后用数组+链表/红黑树,初始化时预估容量可避免扩容。SparseArray优化查找,ArrayMap减少冲突。 Kotlin优化摘要:Kotlin的List用`listOf/mutableListOf`,Map用`mapOf/mutableMapOf`,支持操作符重载和扩展函数。序列提供懒加载,解构用于遍历Map,扩展函数默认参数增强灵活性。
8 0
|
6天前
|
消息中间件 存储 Kafka
实时计算 Flink版产品使用问题之通过flink同步kafka数据进到doris,decimal数值类型的在kafka是正常显示数值,但是同步到doris表之后数据就变成了整数,该如何处理
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
6天前
|
消息中间件 存储 Kafka
实时计算 Flink版产品使用问题之 从Kafka读取数据,并与两个仅在任务启动时读取一次的维度表进行内连接(inner join)时,如果没有匹配到的数据会被直接丢弃还是会被存储在内存中
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。