kafka学习笔记(二)架构深入

1、kafka的工作流程

 

Kafka 中消息是以 topic 进行分类的,生产者生产消息,消费者消费消息,都是面向 topic的。

topic 是逻辑上的概念,而 partition 是物理上的概念,每个 partition 对应于一个 log 文件,该 log 文件中存储的就是 producer 生产的数据。Producer 生产的数据会被不断追加到log 文件末端,且每条数据都有自己的 offset。消费者组中的每个消费者,都会实时记录自己消费到了哪个 offset,以便出错恢复时,从上次的位置继续消费。

2、kafka的存储机制

kafka采取了分片和索引机制,每个partition分为多个segment。每个segment包含“0000xxxx.index”文件和”0000xxxx.log“文件,xxxx是当前segment第一条消息的偏移量。这些文件存在同一个文件夹,文件夹命名规则:topic名称+分区序号。

3、kafka生产者

  1. 分区的原因:
    1. 方便集群扩展,可以自定义partition的大小来适应集群大小;
    2. 可以提高并发,因为可以以partition为单位读写;
  2. 分区的原则:
    1. partition的值;
    2. 无partition的值,有key,将key的hash值与partition的数量取余得到partition的值;
    3. 无partition,无key,第一次调用时随机生成一个整数(后面每次调用在这个整数上自增),将这个值与 topic 可用的 partition 总数取余得到 partition值,也就是常说的 round-robin 算法。
  3. 数据可靠性
    1. 生产者发送消息到topic,topic的partition收到数据,会返回ack;
    2. ack机制:
      1. 全部接受完,才发送ack
      2. ISR(动态维护follower,时间阈值由replica.lag.time.max.ms决定)
    3. ack应答机制
      1. 0 不需要返回ack
      2. 1 leader接受完,未等follower同步,就返回ack
      3. -1 follower同步完,返回ack
  4. 故障处理(LEO:每个副本最大的offset;HW:消费者见到的最大的offset,ISR队列中最小的LEO)保证数据一致性,不保证数据不丢失或者不重复
    1. follower故障
      1. follower 的 LEO 大于等于该 Partition 的 的 HW
    2. leader故障
      1. 截掉高于HW的数据
  5. 数据完整性(Exactly Once严格一次)
    1. At Least Once + 幂等性 = Exactly Once

4、Kafka消费者

  1. 消费方式:pull(拉)
  2. 分区分配策略
    1. RoundRobin(轮询分区)
    2. Range(范围分区,默认为此策略)
  3. offset维护
    1. Kafka 0.9 版本之前,consumer 默认将 offset 保存在 Zookeeper 中,从 0.9 版本开始,

consumer 默认将 offset 保存在 Kafka 一个内置的 topic 中,该 topic 为__consumer_offsets。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值