kafka
1.kafka如何保证消息不丢失
分为三个步骤
- 1.从生产者到broke:异步发送,失败重试或手动处理
- 2.broke存储: kafka有确认机制, acks状态 0 不需要确认,1 有一个副本收到请求,2全部副本收到请求
- 3.消费消息:消费时设置手动提交偏移量,异步加同步提交
这里有一种情况下可能会出现消息丢失,当某个消费组故障时,需要其他消费组重平衡的情况,
如果设置自动提交可能会出现已经消费的消息的偏移量与实现消费的偏移量不一致,因为自动提交的时间间隔为5秒
2.kafka的顺序消费
Kafka是如何保证消费的顺序性?
一个topc的数据可能存储在不同的分区中,每个分区都有一个按照顺序的存储的偏移量,如果消费者关联了多个
分区不能保证顺序性
解决方案1: 发送消息时指定分区号
解决方案2: 发送消息时按照相同的业务设置相同的key
3.高可用,分区副本复制
Kafka的高可用机制
- 集群:
一个kafka集群由多个broker3实例组成,即使某一台宕机,也不耽误其他broker继续对外提供服务- 复制机制:
一个topic有多个分区,每个分区有多个副本,有一个leader,其余的是follower,副本存储在不同的broker中
所有的分区副本的内容是都是相同的,如果leader发生故障时,会自动将其中一个follower提升为leader,保证
了系统的容错性、高可用性
复制机制中的ISR
ISR(in-sync replica)需要同步复制保存的follower
分区副本分为了两类,一个是ISR,与leader副本同步保存数据,另外一个普通的副本,是异步同步数据,当leader
挂掉之后,会优先从ISR副本列表中选取一个作为leader
4.kafka垃圾清理机制
Kafka存储结构
Kafka中topic的数据存储在分区上,分区如果文件过大会分段存储segment
每个分段都在磁盘上以索引(xxxx.index)和日志文件(xxxx.log)的形式存储
分段的好处是,第一能够减少单个文件内容的大小,查找数据方便,第二方便kafka进行日志清理。
日志的清理策略有两个:
根据消息的保留时间,当消息保存的时间超过了指定的时间,就会触发清理,默认是168小时(7天)
根据topic存储的数据大小,当topic所占的日志文件大小大于一定的阈值,则开始删除最久的消息(默认关闭)
5.kafka的高性能设计
- 1.顺序读写
- 2.页缓存,把数据存储到页缓存中,把对磁盘的访问变为对内存的访问
- 3.零拷贝 消费时直接从页缓存中拿取数据 减少了页缓存到kafka kafka到内存缓冲区的拷贝
- 4.消息分区 可以充分利用服务器集群的性能








网友评论