Kafka的一些重要知识

1.Kafka的架构

1.组成
kafka由生产者、Broker、消费者、Zookeeper组成

2.每部分的作用

1)Producer :消息生产者,就是向 kafka broker 发消息的客户端;
2)Consumer :消息消费者,向 kafka broker 取消息的客户端;

3)Consumer Group (CG):消费者组,由多个 consumer 组成。消费者组内每个消费者负责消费不同分区的数据,一个分区只能由一个组内消费者消费;消费者组之间互不影响。所有的消费者都属于某个消费者组,即消费者组是逻辑上的一个订阅者。

4)Broker :一台 kafka 服务器就是一个 broker。一个集群由多个 broker 组成。一个 broker可以容纳多个 topic。
5)Topic :可以理解为一个队列,生产者和消费者面向的都是一个 topic;

6)Partition:为了实现扩展性,一个非常大的 topic 可以分布到多个 broker(即服务器)上,一个 topic 可以分为多个 partition,每个 partition 是一个有序的队列;

7)Replica:副本,为保证集群中的某个节点发生故障时,该节点上的 partition 数据不丢失,且 kafka 仍然能够继续工作,kafka 提供了副本机制,一个 topic 的每个分区都有若干个副本,一个 leader 和若干个 follower。

8)leader:每个分区多个副本的“主”,生产者发送数据的对象,以及消费者消费数据的对象都是 leader。
9)follower:每个分区多个副本中的“从”,实时从 leader 中同步数据,保持和 leader 数据的同步。leader 发生故障时,某个 follower 会成为新的 follower。

2.kafka的文件存储机制

1.一个topic可以分为多个partition,一个partition会分为多个segment,一个segment对应着两个文件:.log文件和.index文件。
2.生产者生产的消息会不断的追加到log文件的末尾,为了防止文件过大而导致数据的定位效率下降,kafka采取了分片索引机制,.log和.index存储在同一文件夹下,.index文件存储大量的索引信息,.log文件存储大量的数据。索引文件中的元数据指向对应数据文件中message的物理偏移地址。

3.Kafka数据可靠性的保证

为了保证producer发送的数据能够到达topic,topic中的每个partition在收到producer发送的而数据之后,都需要向producer发送ack(acknowledge)。

1.何时发送ack?
确保有follower和leader同步完成,leader在发送ack,这样才能够保证leader在挂掉之后,能够在follower中选出新的leader。

2.多少分follower同步完成发送ack?
全部follower同步完成发送ack。
优点:选出新的leader时,能容忍N台节点的故障。
缺点:延迟高。

4.ISR(同步队列机制)

leader在收到数据之后,所有的follower开始同步数据,但是有一个follower因某种故障迟迟不能与leader进行同步,那么leader就要等下去,怎么解决? kafka引入了同步队列机制:

1.leader维护了一个动态的in-sync replica set (ISR),意为和leader保持同步的follower集合,当ISR中的follower完成数据同步之后,leader就会给follower发送ack。如果follower长时间(改时间阈值由replica.lag.time.max.ms参数设定)没有向leader同步数据,则该follower将被踢出ISR。

5.ack应答机制

1.ack = 0 :producer发送完数据就不管了,延迟低,但是容易丢数据
2.ack = 1:producer发送完数据,等待broker的ack,partition的leader落盘成功返回ack,如果在follower同步数据之前leader故障,可能丢失数据。
3.ack = -1:partition的follower和leader全部落盘成功才返回ack。如果在follower同步完成之后,broker发送ack之前,leader发生故障,会造成数据重复。

6.kafka数据一致性的保证

leader发生故障之后,会从ISR中选出一个新的leader,为了保证副本之间数据的一致性,其余的follower会先将各自的log文件高于HW的部分截掉,然后从新的leader同步数据(这样只能保证数据之间的一致性,但是不能够保证数据不丢失,不重复)。

7.Exactly once语义

1.at least once:至少一次,ack=-1,不丢数据,但可能会重复
2.at most once:至多一次,ack=0,不重复,但可能会丢失
3.Exactly ince:既不重复又不丢失。

8.Kafka高效读写的原因

1.顺序写磁盘(400M/s,随机读写十几到几百k/s)
2.零复制技术(也叫零拷贝)
关于零拷贝,我会单独写一篇文章。

猜你喜欢

转载自blog.csdn.net/weixin_48929324/article/details/117461105
今日推荐