自学内容网 自学内容网

一些Kafka面试题

Kafka是如何保证消息不丢失?

1.生产者发送消息到Broker丢失:

设置异步发送:发送失败则使用回调进行记录或者重发

消息重试:参数配置,可以设置重试次数

2.消息在broker中存储丢失

发送确认机制acks

acks=0,生产者在成功写入消息之前不会等待任何来自服务器的响应,消息有丢失的风险,但速度最快

acks=1,只要集群首领节点收到消息,生产者就会收到一个来自服务器的成功响应

acks=all,只有当所有参与赋值的节点全部收到消息时,生产者才会收到一个来自服务器的成功响应

3.消息从Broker接受消息丢失

消费者默认自动按期提交已经消费的偏移量,默认5s提交一次

如果出现重平衡的情况,可能会重复消费或者丢失数据

 关闭自动提交偏移量,开启手动提交偏移量,提交方式最好是同步+异步提交

Kafka如何保证消费的顺序性?

默认情况下,一个topic的数据可能存储在不同的分区中,每个分区都有一个按照顺序的存储的偏移量,如果消费者关联了多个分区不能保证顺序性

解决方案:1.发送消息时指定分区号

2.发送消息时按照相同的业务设置相同的key,最终计算的时候也能找到同样的分区进行存储

Kafka的高可用机制

集群模式

一个kafka集群由多个broker实例组成,即使一个broker宕机,也不耽误其他broker继续对外提供服务

分区备份机制

一个topic有多个分区,每个分区有多个副本,有一个leader,其余的是follower,副本存储在不同的broker中;所有的分区副本的内容都是相同的,如果leader发生故障时,会自动将其中一个follower提升为leader,保证高可用性

Kafka集群的工作原理

  1. 消息生产

    • 生产者将消息发送到Broker,Broker将消息存储到主题的分区。
    • 生产者可以选择将消息发送到特定的分区,或者让Kafka根据键值自动分配分区。
  2. 消息存储

    • Broker将消息存储在磁盘上,并维护消息的索引和偏移量。
    • Kafka保证消息的持久化,直到消费者已经确认消费。
  3. 消息消费

    • 消费者从Broker读取消息,并根据偏移量跟踪他们已经读取的消息。
    • 消费者组内的消费者协调处理分区中的消息,确保每个消息只被处理一次。
  4. 消息复制

    • 为了提高可靠性,Kafka支持消息的复制。每个分区可以有多个副本,副本之间通过ZooKeeper协调。
    • 主副本负责处理生产者和消费者的消息请求,其他副本用于故障转移。

Kafka的数据清理机制

Kafka的文件存储机制:

1.Kafka中topic的数据存储在分区上,分区如果文件过大就会分段存储segment

2.每个分段在磁盘上以索引和日志文件的形式存储

3.分段的好处是,第一能够减少单个文件内容的大小,查找数据方便,第二方便kafka进行日志清理

数据清理机制:

1.根据消息的保留时间,当消息在Kafka中保存的时间超过了指定的时间,就会触发清理过程

2.根据topic存储的数据大小,当topic所占的日志文件大小大于一定的阈值,则开始删除最久的消息

 

Kafka中高性能的设计

四次拷贝:

零拷贝(两次):

消息分区:不受单台服务器的限制,可以不受限的处理更多的数据

顺序读写:磁盘顺序读写,提升读写效率

页缓存:把磁盘中的数据缓存到内存中,把对磁盘的访问变成对内存的访问


原文地址:https://blog.csdn.net/qq_44763553/article/details/140815537

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!