Kafka

Kafka

  1. 概述

    Kafka 是一个分布式的基于发布/订阅模式的消息队列,主要应用于大数据实时处理领域。

    优点:

    ​ 解耦

    ​ 可恢复性

    ​ 缓冲

    ​ 灵活性 & 峰值处理能力 -> 削峰

    ​ 异步通信

    消息队列的两种模式:

    1. 点对点:一对一,消费者主动拉取数据,消息收到后消息清除

      1. 发布/订阅模式:一对多,消费者消费数据之后不会清除消息
  2. 安装部署

    # zookeeper
    tar -zxvf zookeeper-3.4.10.tar.gz -C /opt/module/
    cd /opt/module/zookeeper-3.4.10/conf/
    mv zoo_sample.cfg zoo.cfg
    vim zoo.cfg  
    # dataDir=/opt/module/zookeeper-3.4.10/zkData
    # server.2=hadoop02:2888:3888
    # server.3=hadoop03:2888:3888
    # server.4=hadoop04:2888:3888
    
    mkdir -p /opt/module/zookeeper-3.4.10/zkData
    cd zkData
    touch myid # 2
    scp -r /opt/module/zookeeper-3.4.10  xiaxia@hadoop03:/opt/module/
    scp -r /opt/module/zookeeper-3.4.10  xiaxia@hadoop04:/opt/module/
    #修改 hadoop03 和 hadoop04 的 myid
    
    #三台机器分别启动
    bin/zkServer.sh start
    bin/zkServer.sh status
    
    # kafka
    tar -zxvf kafka_2.11-0.11.0.2.tgz -C /opt/module/
    cd ../module/
    mv kafka_2.11-0.11.0.2/ kafka
    mkdir data
    vim /opt/module/kafka/config/server.properties # 见配置文件
    scp -r /opt/module/kafka  xiaxia@hadoop03:/opt/module/
    scp -r /opt/module/kafka  xiaxia@hadoop04:/opt/module/
    vim /opt/module/kafka/config/server.properties #修改2,3,4
    cd /opt/module/kafka/bin
    
    #启动
    sed -i 's/\r$//' xxx.sh
    bin/mykafka.sh start
    
    /opt/module/kafka/bin/kafka-server-stop.sh /opt/module/kafka/config/server.properties
    /opt/module/kafka/bin/kafka-server-start.sh -daemon /opt/module/kafka/config/server.properties
    
    # 查看 topic
    bin/kafka-topics.sh --list --zookeeper hadoop02:2181
    # 创建 topic  分区2副本2
    bin/kafka-topics.sh --create --zookeeper hadoop02:2181 --topic first --partitions 2 --replication-factor 2
    # 删除
    bin/kafka-topics.sh --delete --zookeeper hadoop02:2181 --topic first
    # 描述
    bin/kafka-topics.sh --describe --zookeeper hadoop02:2181 --topic first
    
    
    # 生产者
    bin/kafka-console-producer.sh --topic first --broker-list hadoop02:9092
    
    # 消费者
    bin/kafka-console-consumer.sh --topic first --bootstrap-server hadoop02:9092
    
    
  3. Kafka 工作流程及文件存储

    1. .index 二分查找
    2. .log
  4. 生产者

    1. 分区策略

      1. 方便在集群中扩展
      2. 可以提高并发
    2. 数据可靠性保证ack

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

      同步策略:全部ack

      ISR:

      acks:

      ​ 0 :producer 不等broker的ack,可能丢数据

      ​ 1:只等leader写完就ack,不管follower,可能丢数据

      ​ -1(all):等leader和ISR里的所有follower都写完才返回ack。但是如果在leader写完,broker在发送ack之前,leader故障,没有发ack,生产者会再发数据,就可能会出现重复数据

​ 3. 数据一致性

​ LEO(Log End Offset):每个副本的最后一个offset

​ HW(High Watermark):消费者能见到的最大的offset,ISR队列中最小LEO

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

​ 4. Exactly Once

​ ack = -1 At Least Once

​ ack = 0 At Most Once

​ At Least Once + 幂等性 = Exactly Once

​ =======> Broker端会对<PID, Partition, SeqNumber>做缓存,当具有相同主键的消息提交时,Broker只会持久化一条。但是PID重启就会变化,同时不同的Partition也具有不同主键,所以幂等性无法保证跨区跨会话的Exactly Once

posted @ 2024-01-30 12:55  停不下的时光  阅读(6)  评论(0编辑  收藏  举报