Kafka入门(二)

在这里插入图片描述

1、Kafka集群工作进程

下面了解一下Kafka的工作流程,Kafka集群会将消息存储在Topic中,每条记录会由一个Key、一个Value和一个Timestamp组成。
Kafka中的消息是以Topic进行分类的,生产者生产消息,消费者消费消息,读取和消费的都是同一个Topic。Topic是逻辑上的概念,Partition是物理上的概念,每个Partition对应一个log文件,该log文件中存储的就是Producer生产的数据。Producer生产的消息会不断的顺序追加到该log文件末尾,并且每条消息都会记录自己的Offset。而消费者组中的每个消费者也都会实时记录当前自己消费到了那个Offset,方便在崩溃恢复时可以继续从上次的Offset位置消费。
在这里插入图片描述

2、Kafka集群存储机制

在这里插入图片描述
Producer端生产的消息会不断的追加到log文件末尾,这样文件就会越来越大,为了防止log文件过大导致数据定位效率低下,那么kafka采取了分片和索引机制。它将每个Partition分为多个Segment,每个Segment对应4个文件,如下

  • .index:索引文件,存储大量的索引信息;
  • .log:数据文件,存储大量的数据;
  • .snapshot:快照文件;
  • .timeindex:时间索引文件;

这些文件都位于同一文件夹下面,该文件夹的名命规则为:topic名称-分区号。这些文件以当前Segment的第一条消息的Offset名命。
索引文件中的元数据指向对应数据文件中消息的物理偏移量,下面为index文件和log文件的示意图:
在这里插入图片描述

3、Kafka集群Replica副本

Kafka中的Partition为了保证数据安全,每个Partition可以设置多个副本,如对分区0,1,2分别设置3个副本(设置两个副本较为合适),而且每个副本都是有“角色”之分的,它们会选取一个副本作为Leader副本,而其他的作为Follower副本。Producer端在发送数据的时候,只能发送到Leader Partition里面,然后Follwer Partition回去Leader Partition那自行同步,Consumer消费数据时也只能从Leader副本那去消费数据。
在这里插入图片描述

4、Kafka集群Controller

Kafka Controller其实就是一个Kafka集群中一台Broker,它除了具有普通Broker的消息发送、消费、同步功能外,还需承担一些额外的工作。Kafka使用公平竞选的方式来确定Controller,最先在Zookeeper成功创建临时节点(/controller)的Broker会成为Controller,一般而言,Kafka集群中的第一台启动的Broker会成为Controller,并将自身Broker编号等信息写入Zookeeper临时节点(/Controller)。

5、Kafka集群Offset维护

Consumer在消费过程中可能会出现断电宕机等故障,在Consumer恢复后,需要哦测那个故障前的Offset位置继续消费,所以Consumer需要实时记录自己消费到了那个Offset,以便故障恢复后继续消费。在Kafka0.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、付费专栏及课程。

余额充值