Kafka入门第一课:kafka的简单介绍

1、kafka是啥?
    kafka是一个高吞吐的分布式消息系统。
 
2、作用
    解耦:SparkStreaming与flume之间以及hdfs与flume之间。
    缓冲:数据高峰时减小hdfs和SparkStreaming压力,起缓冲作用。kafka消费速度可设置。
    异步通信:
###注:
    kafka最主要的作用就是用来做缓冲中间件
 
3、特点及优势  
    1、生产者和消费者的模型
    2、可靠性:
                kafka不丢数据,数据直接写入磁盘,而不是存在内存中
                消费者不丢数据:至少一次,严格一次
    3、消费者的消费速度可以设置
    4、数据最后一次消费后在磁盘保存一星期,到期后数据过期
    5、多副本机制,可以并行消费,提高并行消费速度
    6、单节点可以连接上千客户端,消费速度可以达到百兆每秒(数据零拷贝)
    7、分区数据严格有序,要是topic数据严格有序可以设置topic一个分区
 
4、kafka中的核心概念
    broker:
        Kafka集群中server节点,负责读写请求,存储消息,管理分区,无主从关系,依赖zk协调
    producer:
        生产者,负责生产消息,比如flume/maxwell
        自己决定我那个哪分区写数据
        生产模式:
                轮询:(非k-v消息)
                    0.8:1分区先写10分钟,2分区再写10分钟。。。。
                    0.8之后:1分区先写1条,2分区再写1条。。。。
                k的hash:(k-v消息)
                    对于key值进行hash,hash值对分区取模进入对应分区
    consumer: 
        消费者,负责消费消息,比如sparkstreaming/flink
    consumer group: 
        一个消费组可以包含一个或多个消费者,同一topic数据只能被一个消费组的其中一个消费者去消费。
    topic:
        消息的分类,支持一个topic多个消费者消费,一个topic由一个或多个分区组成
    partition:
        分区,下标从0开始,一个分区。
    replication:
        副本,一个分区会被复制的数量。可以并行消费,提高并行消费的速度。
    offset:
        偏移量,消费一个分区数据时数据所在的下标,从0开始
######注意:
    一个分区被一个broker管理,一个broker管理多个分区
    分区总数和消费者组中的消费者数一一对应
    
5、Spark + kafka版本
    1、Spark 1.6 + kafka 0.8.2:
        zookeeper维护offset
        弊端:
            每次消费都要去zookeeper中更新offset,在而zk不适用于大批量的频繁读写    
    2、Spark 2.3 + Kafka 0.10/0.11:
        kafka维护offset
 
6、单节点搭建kafka
    前置:安装好zookeeper
    1、tar -zxvf kafka_2.11-0.11.0.3.tgz -C ../apps
    2、vi /opt/apps/kafka_2.11-0.11.0.3/config/server.properties
        设置一下三个参数:
            broker.id=0                
            log.dirs=$KAFKA_HOME/kafka-logs
            zookeeper.connect=Linux001:2181   #多个用逗号分隔
    3、vi + /etc/profile
        export KAFKA_HOME=/opt/apps/kafka_2.11-0.11.0.3
        export PATH=$PATH:$KAFKA_HOME/bin
         
        source /etc/profile
    4、启动zookeeper:
            zkServer.sh start(所有zk节点)
    5、启动kafka:
            kafka-server-start.sh $KAFKA_HOME/config/server.properties(所有kafka节点)
 ###注意:
    多节点搭建scp一下,改一下broker.id即可           
        
        
7、kafka常用命令
    1、创建topic
        kafka-topics.sh --create \
        --zookeeper Linux001:2181 \     #多台zk,逗号分隔
        --partitions 3 \                #分区数
        --replication-factor 3 \        #每个分区副本数,不要超过kafka集群节点数   
        --topic t001                    #topic 名字
    2、列出topic列表
        kafka-topics.sh --list \
        ---zookeeper Linux001:2181 \     #多台zk,逗号分隔
    3、查看topic信息
        kafka-topics.sh --describe \
        --zookeeper Linux001:2181 \     #多台zk,逗号分隔
        --topic t001                    #不带这个参数,则列出所有topic
        显示结果如下:
            Topic:test      PartitionCount:3        ReplicationFactor:3     Configs:
            Topic: test     Partition: 0    Leader: 1       Replicas: 1,3,2 Isr: 1,3,2
            Topic: test     Partition: 1    Leader: 2       Replicas: 2,1,3 Isr: 2,1,3
            Topic: test     Partition: 2    Leader: 3       Replicas: 3,2,1 Isr: 3,2,1
        结果分析:
            topic名称:x  分区数量:y     副本数量:z
            topic名称  分区标号  分区leader是哪个broker 副本所在节点  同步状态的副本
            topic名称  分区标号  分区leader是哪个broker 副本所在节点  同步状态的副本
            topic名称  分区标号  分区leader是哪个broker 副本所在节点  同步状态的副本
        拿第二行做分析:
            Partition: 0
            Leader: 1  指的是broker.id=1  读写
            Replicas: 复制该分区数据的节点列表,第一位代表leader  静态表述
            Isr: in-sync Replicas 正在复制的副本节点列表          动态表述
                 当leader挂了,会从这个列表选举出leader
    4、删除topic 
        kafka-topics.sh  --delete \
        --zookeeper Linux001:2181 \     #多台zk,逗号分隔
        --topic t001
        ####假删除,并没有真正删除
 
    删除zk上的topic元数据:
        rmr /kafka/config/topics/t001
        rmr /kafka/brokers/topics/t001
        rmr /kafka/admin/delete_topics/t001
    删除本地磁盘上的topic数据:
        rm -rf ${KAFKA_HOME}/kafka-logs/t001
 
    5、调整topic分区数(只能调大,不能调小)
        kafka-topics.sh --alter \
        --zookeeper Linux001:2181 \     #多台zk,逗号分隔
        --partitions 4 --topic t001  
    6、创建生产者
        kafka-console-producer.sh \
        --broker-list Linux001:9092 \     #多台kafka,逗号分隔
        --topic t001
    7、创建消费者(同时可以有多个消费者)
        kafka-console-consumer.sh \
        --zookeeper Linux001:2181 \     #多台zk,逗号分隔
        --from-beginning \              #有这个参数,则从头开始消费
        --topic t001

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

二百四十九先森

你的打赏是我努力的最大动力~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值