kafka总结

kafka总结,第1张

kafka总结 为什么使用消息队列?消息队列的作用是什么?

异步、解耦、削峰填谷

kafka的topic和分区内部是如何存储的,有什么特点?
  1. 在Kafka文件存储中,同一个topic下有多个不同partition,每个partition为一个目录,partiton命名规则为topic名称+有序序号,第一个partiton序号从0开始,序号最大值为partitions数量减1。
  2. 每个partion(目录)相当于一个巨型文件被平均分配到多个大小相等segment(段)数据文件中。但每个段segment file消息数量不一定相等,这种特性方便old segment file快速被删除。
  3. segment file组成:由2大部分组成,分别为index file和data file,此2个文件一一对应,成对出现,后缀".index"和“.log”分别表示为segment索引文件、数据文件.
与传统的消息系统相比,kafka的消费模型有什么优点

Kafka 采取拉取模型(Poll),由自己控制消费速度,以及消费的进度,消费者可以按照任意的偏移量进行消费。

kafka如何实现分布式的数据存储和数据读取?

kafka通过副本的形式来完成kafka服务的高可用性,每个分区可以有多个副本,由一个leader和多个follower组成。

数据存储的时候先要计算出数据将要存储在哪个分区,再找到这个分区的leader节点,将数据存储进去,分区的其他follower节点定时从leader节点同步数据,通过ack的机制确保数据同步完成。同步完成后更新LEO和HW。

数据读取时从leader读取数据,可见的数据最多到HW。

为什么需要分区,也就是说主题只有一个分区,难道不行吗?

分区可以提高topic的并发吞吐量,每个分区的数据都是有序的,多个分区就可以用多个consumer进行消费。

日志为什么要分段?

一个日志文件如果过大,会降低查找数据的速度。

kafka是依靠什么机制保持高可靠,高可用?

通过ack、事务、LEO、HW的机制保证数据可靠性,
通过副本以及ISR的机制保证服务高可用性。

消息队列如何保证消息幂等

通过事务

重平衡(reblance)的触发条件:

重平衡的触发条件主要有三个:

  1. 消费者组内成员发生变更,这个变更包括了增加和减少消费者。注意这里的减少有很大的可能是被动的,就是某个消费者崩溃退出了
  2. 主题的分区数发生变更,kafka目前只支持增加分区,当增加的时候就会触发重平衡
  3. 订阅的主题发生变化,当消费者组使用正则表达式订阅主题,而恰好又新建了对应的主题,就会触发重平衡
Partition建议

选择合适的Partition数量。

如何降低集群不可用性,单节点上Partition数目不超过3000;整个集群的分区总数不超过10000。

如何减少端对端的延迟,每个broker的partition数量最好不超过100*broker*replica个。

建议:单个Partition的磁盘占用最大不超过100GB(计算方法:所属Topic的数据流量除以Partition数,然后乘以保存时间)
*

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5696236.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存