Kafka面试题及原理

embedded/2025/3/4 21:56:36/

1. 消息可靠性(不丢失)

使用Kafka在消息的收发过程都会出现消息丢失,Kafka分别给出了解决方案

  • 生产者发送消息到Brocker丢失
  • 消息在Brocker中存储丢失
  • 消费者从Brocker
    在这里插入图片描述

在这里插入图片描述

幂等方案:【分布式锁、数据库锁(悲观锁、乐观锁)】

1.1 生产者发送消息到Brocker丢失

设置异步发送
在这里插入图片描述

1.2 消息在Brocker中存储丢失

在这里插入图片描述

1.3 消费者从Brocker接收消息丢失

在这里插入图片描述

在这里插入图片描述

如果consumer(消费者)挂掉,自动偏移量的错误可能会导致丢失或重复消费数据
解决方案:禁用自动提交偏移量,改为手动

  • 同步提交(阻塞)
  • 异步提交(信息不准确)
  • 同步+异步组合提交

2. 消息顺序性

应用场景:

  • 即时消息中的单对单聊天和群聊,保证发送方消息发送顺序与接收方的顺序一致
  • 充值转账两个渠道在同一个时间进行余额变更,短信通知必须要有顺序
    问题原因:
    一个topic的数据可能存储在不同的分区中每个分区都有一个按照顺序的存储的偏移量,如果消费者关联了多个分区不能保证顺序性
    解决方案(把消息存储在同一个分区下):
  • 发送消息时指定分区号
  • 发送消息时按照相同的业务设置相同的key

3. 高可用机制

  • 集群模式
  • 分区备份机制

3.1 集群模式

在这里插入图片描述

3.2 分区备份机制

  • 一个topic有多个分区,每个分区有多个副本,其中有一个leader,其余的是follower,副本存储在不同的broker中
  • 所有的分区副本的内容是都是相同的,如果leader发生故障时,会自动将其中一个follower提升为leader
    在这里插入图片描述

在这里插入图片描述

过多的同步复制会降低效率(同步易阻塞),所以只设置较少的ISR

4. 数据清理机制

  • 文件存储机制
  • 数据清理机制

4.1 文件存储机制

  • Kafka中topic的数据存储在分区上,分区如果文件过大会分段存储segment
  • 每个分段都在磁盘上以索引(xxxx.index)和日志文件(xxxx.log)的形式存储
  • 分段的好处是,第一能够减少单个文件内容的大小,查找数据方便,第二方便kafka进行日志清理。
    在这里插入图片描述

4.2 数据清理机制

在这里插入图片描述

5. 高性能设计

  • 消息分区:不受单台服务器的限制,可以不受限的处理更多的数据
  • 顺序读写:磁盘顺序读写,提升读写效率
  • 页缓存:把磁盘中的数据缓存到内存中,把对磁盘的访问变为对内存的访问
  • 零拷贝:减少上下文切换及数据拷贝
  • 消息压缩:减少磁盘IO和网络10
  • 分批发送:将消息打包批量发送,减少网络开销

5.1 零拷贝

在开启拷贝读信息要拷贝4次(性能不高)
在这里插入图片描述

开启零拷贝(页缓存)后只拷贝两次
在这里插入图片描述


http://www.ppmy.cn/embedded/170015.html

相关文章

【每日学点HarmonyOS Next知识】网络请求回调toast问题、Popup问题、禁止弹窗返回、navigation折叠屏不显示返回键、响应式布局

【每日学点HarmonyOS Next知识】网络请求回调toast问题、Popup问题、禁止弹窗返回、navigation折叠屏不显示返回键、响应式布局 1、HarmonyOS http请求回调后,showToast报错? 使用http.HttpRequest.request发起http请求后,在promise的then回…

sql学习笔记(二)

在 SQL 中,using 和 on 是用于连接(join)操作的关键字,它们都用于指定连接条件,但它们在语法和使用场景上有一些区别。以下是它们的详细对比: 一. on关键字 定义 on是最常用的连接条件关键字&#xff0c…

IP属地是通过卫星定位的吗?如何保护用户隐私

在数字时代,网络空间成为了人们日常生活不可或缺的一部分。随着社交媒体、在线服务等平台的兴起,用户IP属地信息的重要性日益凸显。然而,关于IP属地是如何确定的,尤其是是否通过卫星定位这一问题,却常常引发公众的疑问…

GCC RISCV 后端 -- GCC 构建系统简介

前文提过&#xff0c;GNU 的项目一般都是使用 GNU Autotools 来实现它们的构建系统&#xff0c;其主要目的是通过 GNU Autotools 对不同平台&#xff08;Target Triple: <CPU ARCH>-<Vendor>-<OS>-<ABI>&#xff09;进行抽象&#xff0c;使得GNU Autot…

构建私有化AI知识库:基于CentOS的Ollama + DeepSeek-R1 +ragflow 整合部署教程

操作系统&#xff1a;CentOS 7.9 CPU&#xff1a;支持 AVX 指令集的 x86_64 处理器 内存&#xff1a;64GB 存储&#xff1a;SSD 1TB 以上 GPU&#xff08;可选&#xff09; 一、组件介绍 Ollama Ollama 是一个专为在本地机器上部署和运行大型语言模型&#xff08;LLM&a…

Unity3D Cinemachine 高级应用详解

引言 Cinemachine 是 Unity3D 中一个强大的相机管理系统&#xff0c;它允许开发者通过简单的配置实现复杂的相机行为。Cinemachine 的核心思想是基于虚拟相机&#xff08;Virtual Camera&#xff09;&#xff0c;通过虚拟相机的优先级、混合、跟随、注视等设置&#xff0c;实现…

ADC采集模块与MCU内置ADC性能对比

2.5V基准电压源&#xff1a; 1. 精度更高&#xff0c;误差更小 ADR03B 具有 0.1% 或更小的初始精度&#xff0c;而 电阻分压方式的误差主要来自电阻的容差&#xff08;通常 1% 或 0.5%&#xff09;。长期稳定性更好&#xff0c;分压电阻容易受到温度、老化的影响&#xff0c;长…

CyberRT(apollo) 定时器模块简述及bug分析

timer 模块 timer的定义&#xff0c;cyberrt中timer模块用于设置定时器任务&#xff0c;字面意思&#xff0c;设置设置定时周期及出发频次&#xff08;周期 or oneshot)&#xff0c;到达指定时间时间触发callback time wheel 时钟节拍轮&#xff0c;常见的定时器设计&#x…