当前位置: 首页 > news >正文

【Java面试丨消息中间件】Kafka

一、kafka是如何保证消息不丢失

1. 介绍

  • 使用kafka在消息的收发过程都有可能会出现消息丢失
    (1)生产者发送消息到broker丢失
    (2)消息在broker中存储丢失
    (3)消费者从broker接收消息丢失
    在这里插入图片描述

2. 生产者发送消息到broker丢失

  • 设置异步发送:同步发送会发生阻塞,一般使用异步发送方式发送消息
    在这里插入图片描述
  • 消息重试:由于网络抖动,造成消息发送失败,可以使用kafka提供的重试机制
    在这里插入图片描述

3. 消息在broker中存储丢失

  • broker存储大体流程
    (1)生产者发送消息到达broker中
    (2)消息存储在分区中,分区分为两个不同角色,leader只有一个,follower可能会有多个
    (3)先把消息保存到leader分区中,然后由leader将消息同步到follower中
    在这里插入图片描述
  • 发送确认机制acks
    (1)要想保证数据不丢失,可以设置acks=all,在所有分区副本保存完成后,才会发送确认给生产者,性能也是最低的
    (2)实际生产环境中,最低也要设置acks=1
    在这里插入图片描述

4. 消费者从broker接收消息丢失

  • 一个kafka集群是由多个broker(kafka实例)组成的
  • 每一个broker中都存在不同的topic,并且一个topic可能存在多个分区,这些分区可能存在不同的broker中
  • 一个消费者组可能存在多个消费者,它们都是消费同一个topic,负责消费topic不同分区
  • topic分区中消息只能由消费者组中唯一一个消费者处理,不同的分区分配给不同的消费者
    在这里插入图片描述
  • 丢失消息原因
    (1)消费者默认是自动按期提交已经消费的偏移量,默认是每隔5秒提交一次。如果消费者组出现重平衡的情况,可能会重复消费或者丢失消息
    (2)可以禁用自动提交偏移量,改为手动
    在这里插入图片描述
  • 解决方案
    (1)同步提交【会阻塞,不推荐】
    (2)异步提交【偏移量可能不准确,不推荐】
    (3)同步+异步组合提交【推荐】
    在这里插入图片描述

5. 总结

在这里插入图片描述

6. 参考答案

在这里插入图片描述

二、kafka是如何保证消息的顺序性

1. 介绍

  • 问题原因
    (1)一个topic中的数据可能存储在不同的分区中,每个分区都有一个按照顺序的存储偏移量,如果消费者关联了多个分区,则不能保证消费的顺序性
  • 解决方案
    (1)发送消息时,指定分区号,往同一个分区中存储消息
    (2)发送消息时,按照相同的业务设置相同的key
    在这里插入图片描述

2. 案例分析

  • springboot集成kafkatemplate
    在这里插入图片描述

3. 参考答案

在这里插入图片描述

三、kafka的高可用机制要了解过吗

1. 介绍

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

2. 集群模式

在这里插入图片描述

3. 分区备份机制

在这里插入图片描述
在这里插入图片描述

4. 总结

在这里插入图片描述

5. 参考答案

在这里插入图片描述

四、kafka数据清理机制有了解过吗

1. 介绍

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

2. kafka文件存储机制

在这里插入图片描述

3. 数据清理机制

在这里插入图片描述

4. 总结

在这里插入图片描述

5. 参考答案

在这里插入图片描述

五、kafka中实现高性能的设计有了解过吗

1. 介绍

在这里插入图片描述

2. 参考答案

在这里插入图片描述

http://www.lryc.cn/news/107890.html

相关文章:

  • 7.数组(一维数组、二维数组、C99中的变长数组、二分查找法)
  • ubuntu服务器配置ftp服务
  • IDA+Frida分析CTF样本和Frid源码和objection模块
  • ConCurrentHashMap常见面试题
  • mysql数据备份并重置
  • I- yh的线段(2023河南萌新联赛第(四)场:河南大学)
  • python与深度学习(十四):CNN和IKUN模型二
  • chrome扩展在popup、background、content之间通信解决传输文件问题
  • Oracle获取创建对象的DDL脚本
  • 《算法竞赛·快冲300题》每日一题:“01树”
  • Mac提示文件:已损坏,无法打开。你应该把它移到废纸篓
  • 探索嵌入式系统:从入门到实践
  • 网络安全知识点整理(作业2)
  • idea数据库快速上手-库操作与表结构和数据操作
  • 当“国潮”遇见“双语” 以传承之心种下一颗文化的种子
  • 计划管理与项目管理:有何区别?
  • 个人信息保护合规审计如何做?
  • HTTP杂谈之Referer和Origin请求头再探
  • 数学建模-爬虫入门
  • HSRM各表
  • Ansible自动化运维工具 —— Playbook 剧本
  • 第二章:多态
  • C++面向对象设计基础
  • Linux定时运行sh脚本,如果sh文件已经在运行,则忽略本次运行
  • SpringBoot项目中的web安全防护
  • stm32和python串口数据收发
  • 无涯教程-jQuery - Dropable移动函数
  • 【Python】Web学习笔记_flask(4)——钩子函数
  • JavaScript 原型链解析,宏任务和微任务
  • 05|Oracle学习(UNIQUE约束)