黑马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中实现高性能的设计有了解过吗?
零拷贝
总结