黑马Java面试笔记之 消息中间件篇(Kafka)

一. Kafka保证消息不丢失

Kafka如何保证消息不丢失

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

  • 生产者发送消息到Brocker丢失
  • 消息在Brocker中存储丢失
  • 消费者从Brocker接收消息丢失

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

  • 设置异步发送
  • 消息重试

1.2 消息在Brocker中存储丢失

  • 发送确认机制acks

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

  • Kafka中的分区机制指的是将每个主题划分成多个分区(Partition)
  • topic分区中只能由消费者组中的唯一一个消费者处理,不同的分区分配给不同的消费者(同一个消费者组)

代码:

总结

二. Kafka保证消费顺序性

面试官:Kafka如何保证消费的顺序性

候选人:Kafka默认存储和消费消息,是不能保证顺序性的,因为一个topic数据可能存储在不同的分区中,每个分区都有一个按照顺序的存储的偏移量,如果消费者关联了多个分区不能保证顺序性

如果有这样的需求的话,我们是可以解决的,把消息都存储同一个分区下就行了,有两种方式都可以进行设置,第一个是发送消息时指定分区号,第二个是发送消息时按照相同的业务设置相同的key,因为默认情况下分区也是通过key的hashcode值来选择分区的,hash值如果一样的话,分区肯定也是一样的

三. Kafka高可用机制

3.1 集群模式

3.2 分区备份机制

总结

四. Kafka数据清理机制

4.1 Kafka文件存储机制

4.2 数据清理机制

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

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

总结

五. Kafka高性能设计

Kafka中实现高性能的设计有了解过吗?

零拷贝

总结

相关推荐
LinXunFeng10 小时前
Obsidian - 使用 Share Note 分享笔记并自部署
前端·笔记·github
小bo波15 小时前
从"任意文件复制"深挖Java I/O:字符流与字节流的本质抉择
java·nio·io流·后端开发·文件复制
蝎子莱莱爱打怪16 小时前
XZLL-IM干货系列 03|消息 ID 设计:一个 UUID 搞不定的事,我用两个 ID 解决了
后端·面试·开源
梯度不陡18 小时前
AI 到底能不能从零写软件?ProgramBench 和 RepoZero 给出了两种答案
前端·javascript·面试
胡萝卜术20 小时前
滑动窗口最大值:从暴力到单调队列,层层优化全解析
前端·javascript·面试
沉默王二1 天前
面试结束后,我反问:“就面个实习至于上这么大强度吗?”面试官:“你对 RAG、Agent、MCP、Skill 理解得很到位,所以要求高一点。”
面试·agent·ai编程
假如让我当三天老蒯1 天前
Options API(选项式 API) 和 Composition API(组合式 API)
前端·vue.js·面试
nanxun8862 天前
记一次诡异的 Docker 容器"串包"故障排查
java
用户1563068103512 天前
Day01 | Java 基础(Java SE)
java
行者全栈架构师2 天前
Maven dependency:tree 的 8 个高级用法
java·后端