KAFKA

目录

1.KAFKA简言

2.KAFKA功能

3.KAFKA流程

4.KAFKA存储

5.KAFKA选举

6.KAFKA实战


前言

KAFKA主要用于消息的海量吞吐场景,通常用于数据的异步,以及流量峰值的平衡削峰,实现架构的松耦合


1.KAFKA简言

        *采用时间戳标识来进行存储,即使TB级别的数据处理也可以保证稳定性

        *极高的数据处理,即便在性能较差的服务器上也能单机每秒10万左右的消息传输

        *可以为消息分区指定多个副本文件,不会出现大规模的数据丢失

        *强横的横向扩展,可以在不重载集群配置的情况下加入节点

2.KAFKA功能

Broker(代理)
Kafka 的一个实例或节点,一个或多个 Broker 组成一个 Kafka 集群
Topic(主题)
Topic Kafka 中同一类数据的集合,相当于数据库中的表
Producer 将同一类数据写入同一个 Topic Consumer 从同一个 Topic 中读取同类数据
Topic 是逻辑概念,用户只需指定 Topic 就可以生产或消费数据,不必关心数据存于何处
Partition(分区)
分区是一个有序的、不可修改的消息队列,分区内消息有序存储
一个 Topic 可分为多个分区,相当于把一个数据集分成多份,分别存储不同的分区中
Parition 是物理概念,每个分区对应一个文件夹,其中存储分区的数据和索引文件
Replication(副本)
一个分区可以设置多个副本,副本存储在不同的 Broker
Producer(消息生产者)
Broker 发布消息的客户端
Consumer(消息消费者
Broker 消费消息的客户端
Consumer Group(CG,消费者组
每个 Consumer 都隶属于一个特定的 CG
一条消息可以发送给多个不同的 CG ,但一个 CG 中只能有一个 Consumer 读取该消息
Zookeeper
Kafka 将元数据保存在 Zookeeper
负责 Kafka 集群管理,包括配置管理、动态扩展、 Broker 负载均衡、 Leader 选举,以及
Consumer Group 变化时的 Rebalance

   3.KAFKA流程

 集群内部消息走向:\

Producer-->Topic-->Partition-->Consumer/Consumer Group
--->  Partition是一个FIFO队列, 写入消息采用在队列尾部追加的方式,消费消息采用在队列        头部 顺序读取的方式
--->  一个Topic可分为多个Partition,仅保证同一分区内消息有序存储,不保证Topic整体(多        个分区之间)有序
--->  为了加快读取速度,多个Consumer可划分为一个组(Consumer Group, CG),并行消        费同 一个Topic
--->  一个Topic可以被多个CG订阅,CG之间是平等的,即一个消息可同时被多个CG消费
---> 一个CG中可以有多个Consumer,CG中的Consumer之间是竞争关系,即一个消息在一       个CG 中只能被一个Consumer消费

4.KAFKA存储

消息存储主要分为索引文件和数据文件两部分

每个partition分区的消息都以文件的方式存储在本地的文件系统内

---> 每个Partition副本都是一个目录,目录中包含若干Segment文件

--->  Segment(段文件)
        • Segment文件是 Kafka 的最小数据存储单元,一个 Partition 包含多个 Segment 文件
        • Segment 文件由以 Message Partition 中的起始偏移量命名的数据文件( *.log)和索               引文件 (*.index、 *.timeindex )组成
        

--->  Offset(偏移量)
        • Offset 是用于定位分区中消息的顺序编号
        • Offset 用于在分区中唯一标识消息
        • 使用 Zookeeper 维护 Offset
--->  Kafka索引
        • 为了提高消息写入和查询速度,为每个 Partition 创建索引,索引文件存储在 Partition                 文件夹下
        • 偏移量索引
        -文件以 offset 偏移量为名称,以 index 为后缀
        -索引内容格式: offset,position
        -采用稀疏存储方式
                 

 

        • 时间戳索引
        -文件以 timeindex 为后缀
        -索引内容格式: timestamp,offset
        -采用稀疏存储方式

           

 5.KAFKA选举

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

ACK选项:

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

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

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

ISR:

        AR: Assigend Replacas用来表示副本的全集

        OSR: out-sync Replicas 离开同步队列的副本

        ISR: in-sync Replicas 计入同步队列的副本

        ISR=Leader+没有落后太多的副本

        AR=OSR+ISR

        消息同步过程:1.producer--->push----->leader

                                  2.leader<----pull<-----follower

                                  3.Follower间隔一段时间去Leader拉取数据,保证数据的一致性

        ISR标准:

                当主节点异常,优先从ISR中选取leader,ISR由KAFKA动态维护。

                当follower超过10秒没有同步数据就会被踢出ISR中:

                                replicas.lag.time.max.ms=10000

                当leader和follower相差超过4000条数据follower也会被提出ISR:

                                replicas.lag.max.messages=40000

                脏节点选举:

                        脏节点选举是KAFKA的一种降级措施,当主节点故障而ISR中的follower也没                          有来的及去同数据,就会选一个时间数据最接近的作为leader

 6.KAFKA实战

        KAFKA部署:Apache Kafka

                

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值