kafka基础学习一

 

工作中经常会使用kafka,但是没有系统性的了解,看个尚硅谷的课程记录下知识点。

第三章:kafka架构深入

3.1 kafka工作流程及文件存储机制

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

2、往kafka中发消息时,如果topic不存在,会默认创建,默认1个leader,1个follower

3、kafka的副本数包含leader这1个;leader和follower肯定不会在一个机器上

4、每个分区维护自己的局部的偏移量,follower会自己找leader维护offset信息

5、kafka消息是以topic进行分类的,生产者生产消息,消费者消费消息,都是面向topic的,这和表的概念类似

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

7、kafka消息默认保存168个小时,即7天,保存在sever.properties文件中,log.retention.hours=168;

8、由于生产者生产的消息会不断追加到log文件末尾,为防止log文件过大导致数据定位效率低下,kafka采取了分片和索引(每个片1G)机制,将每个partition分为多个segment。每个segment对应两个文件,index文件和log文件,这些文件位于一个文件夹下,该文件夹的命名规则为,topic名称+分区序号。例如,first这个topic有三个分区,则其对应的文件夹为first-0,first-1,first2。

9、index和log文件以当前segment的第一条消息的offset命名。index文件存储大量的索引信息,通过index文件读取到offset和数据大小,所以在磁盘中也快

例:

00000000000000000000.index

00000000000000000000.log

00000000000000000100.index

00000000000000000100.log

00000000000000000200.index

00000000000000000200.log

3.2 kafka生产者

3.2.1 分区策略

    1.分区的原因

        1.1 方便在集群中拓展,每个partition可以通过调整以适应它所在的机器,而一个topic又可以有多个partition组成,因此整个集群就可以适应任意大小的数据了

        1.2 可以提高并发,可以以partition为单位读写了

     2.分区的原则

        需要将producer发送的数据封装成一个ProducerRoecrd对象。

        2.1 指明partition的情况下,直接将指明的值作为partition值

        2.2 没有指明partition值但有key的情况下,将key的hash值与topic的partition值进行取余得到partition值

        2.3 既没有partition值又没有key的情况下,第一次调用时随机生成一个整数(后面每次调用在这个整数上自增),将这个值与topic可用的partition总数取余得到partition值,也就是常说的                      round-robin算法。

3.2.2 数据可靠性保证

       为保证producer发送的数据,都可靠的发送到指定的topic,topic的每个partition收到producer发送的数据后,都需要向producer发送ack(acknowledgement确认收到),如果producer收到ack,就会进行下一轮的发送,否则重新发送数据。

      1.副本同步策略

       半数以上副本完成同步发送ack        选举新的leader,容忍n台节点的故障,需要2n+1个副本

       全部完成才发送ack(kafka选择)        选举新的leader时,容忍n台节点的故障,需要n+1个副本

      2.ISR

         第二种方案中,leader收到数据,所有的follow都开始同步数据,其中一个follower,因为某种故障,迟迟不能与leader同步。

         leader维护了一个动态的in-sync-replica set(ISR),意为和leader保持同步的follower集合,当ISR中follower完成数据的同步之后,leader就会给follower发送ack,如果follower中长时间未向leader同步数据,则该follower将被踢出LSR,该事件发生故障之后,就会从ISR中选举新的leader。

      3.ack应答机制

       对于某些不太重要的数据,对数据的可靠性要求不是很高,能够容忍数据的少量丢失,所以没必要等ISR中的follower全部接收成功。

      acks参数配置:

      0:producer不等待broker的ack,这一操作提供了一个最低的延迟,broker已接收到还没有写入磁盘就已经返回,当broker故障时可能会丢失数据

     1:producer等待broker的ack,partition的leader落盘成功后返回ack,如果在follower同步成功之前leader故障,那么会丢失数据

     -1:produer等待broker的ack,partition的leader和ISR中follwer全部落盘成功后才返回ack,但是如果在follower同步完成后,broker发送ack之前,leader发生故障,那么会造成数据重复。

     4.故障处理细节

       如何保持数据一致性

       LEO(log end offset):每个副本最大的offset

       HW(high watermark):指的是消费者能见到的最大的offset,ISR队列中最小的LEO

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值