JAVA面试八股文-基础篇(kafka)

谁无暴风劲雨时,守得云开见月明


什么是kafka

kafka是由java编写的高可用,高性能,高吞吐量的消息队列。
由以下组成:

zookeeper: 协调选举
消费者组: 数据消费
生成者: 数据生成
broker: kafka节点
分区: 负载均衡器
offset: 偏移量
leader: 消息分发节点
follower: 数据跟随节点
副本集: 从节点

kafka的ack机制

kafka的ack是针对生产者而言
ack有三种设置:-1,0,1

-1:等待从节点全部备份完成后返回ack。
0:不需要等待任何节点返回ack直接发送消息。
1:等待leader返回ack后发送消息

kafka如何解决消息重复问题

消费重复的问题的产生:
在ack机制为-1的时候,主节点更新完消息,从节点备份完消息,主在发送ack消息的时候主点挂了。从节点选举成主节点。
生成者没有ack消息,重新发送消息,造成节点信息写了2个一样的消息。

解决办法: 做幂等操作,加上token,发送的时候判断一下,存在则不发送。

kafka如何解决重复消费问题。

消息重复消费问题,发生在offset提交阶段发生错误,当重新启动程序读取的时候,会按配置文件的最小offset进行读取。

解决办法一
将消费记录token存入redis,cache等其他缓存当中。

解决办法二:
max.poll.records设置参数,设置拉取的条数,具体情况就需要按自己的程序需要进行设置。默认是500,无法完全避免重复消息问题,可以减少重复消费的条数。

kafka能不能保证消费顺序

在单个分区中能保证消费顺序,在多个分区中无法保证消费顺序。

kafka如何保证副本集都同步了数据

在每个分区当中都有个ISR集合,简单来说就是维护了leader和follower的表,直接用心跳机制进行维护。如果心跳断了,则剔除ISR集合。

kafka高水准,低水准

kafka在消息同步的时候发生了宕机了,主有100条,从只有90条,这个时候消费者去读取93,但是主宕机了,从变主了。kafka采用低水准对消费者可见,意思是消费者只能读90以下的数据,90以上的数据读取不到。

kafka是poll模型还是push模型

kafka是拉模型,poll可以根据自己的消费能力进行消费,而推容易产生消息堆积的问题。

推模型需要设置限流。等待ack进行返回再推.

数据传输的定义

最少一次(可能产生消费重复),最多一次(可能产生消费丢失),仅切只有一次(ack+幂等性)。

Kafka 分区数越多性能就越好吗? 为什么?

  1. 每个分区数都对应一个 log 文件,log 文件是顺序写的,但如果
    有非常多分区同时刷盘,就会变相成乱序写了,我猜想这也是为
    什么 RocketMQ 一个 broker 只会拥有一个 CommitLog 的原因
    之一吧;
  2. 客户端会为每个分区调用一条线程处理,多线程并发地处理分区
    消息,分区越多,意味着处理的线程数也就越多,到一定程度
    后,会造成线程切换开销大;
  3. 其中一个 broker 挂掉后,如果此时分区特别多,Kafka 分区
    leader 重新选举的时间大大增加;
  4. 每个分区对应都有文件句柄,分区越多,系统文件句柄就越多;
  5. 客户端在会为每个分区分配一定的缓冲区,如果分区过多,分配
    的内存也越大。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java面试八股文2023 第一部分:Java基础 1. Java语言的特点和优点 2. Java中基本数据类型和引用数据类型的区别 3. Java中的访问修饰符及其作用 4. Java中的多态和继承的实现原理 5. Java中的异常处理机制及其使用方法 6. Java中的集合框架及其常用类 7. Java中线程的实现方式和线程同步机制 8. Java中的反射机制及其使用方法 第二部分:Web开发 1. JavaWeb开发的基本原理和技术架构 2. Servlet和JSP的作用及其使用方法 3. Spring框架的基本原理和使用方法 4. Hibernate框架的基本原理和使用方法 5. MyBatis框架的基本原理和使用方法 6. RESTful API的设计原则和使用方法 7. Web安全的基本原理和防范措施 8. Web性能优化的基本原理和方法 第三部分:数据库 1. SQL语言的基本语法和使用方法 2. 数据库的设计原则和范式理论 3. MySQL数据库的基本原理和使用方法 4. Oracle数据库的基本原理和使用方法 5. MongoDB数据库的基本原理和使用方法 6. Redis数据库的基本原理和使用方法 7. 数据库的备份和恢复方法 8. 数据库的性能优化和调优方法 第四部分:分布式系统 1. 分布式系统的基本概念和架构 2. 分布式系统的通信协议和数据传输方式 3. 分布式系统的负载均衡和故障恢复机制 4. 分布式缓存技术和使用方法 5. 分布式数据库的基本原理和使用方法 6. 分布式消息队列的基本原理和使用方法 7. 微服务架构的基本原理和使用方法 8. 容器化技术和Kubernetes的基本原理和使用方法 第五部分:大数据技术 1. 大数据的概念和发展历程 2. Hadoop的基本原理和使用方法 3. Spark的基本原理和使用方法 4. Hive的基本原理和使用方法 5. HBase的基本原理和使用方法 6. Kafka的基本原理和使用方法 7. Flink的基本原理和使用方法 8. 大数据处理的性能优化和调优方法 以上是Java面试八股文2023的基本内容,希望能对您的面试有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值