kafka的简单介绍

kafka 分布式的消息存储服务


    kafka 术语:
        broker:安装了kafka软件的一台机器
        topic:kafka内部消息是分主题存放的
        partition:在Topic的内部,数据是按照分区存放
        leader: leader某个主题下的某个分区对外提供的读写服务的角色
        follower:某个分区除了leader,其他的都是follower,同步leader数据
        replication:指的是某个主题的某个分区有多少个副本
        Producer:(生产者)kafka一个客户端,用来将数据发送到kafka
        Consumer:(消费者)kafka一个客户端,用来从kafka获取消息的
        Consumer Group:每一个消费者都拥有一个groupId,每个groupId只能从kafka中获取一次数据
        Controller:kafka集群中某台broker上启动的一个服务,用来leader的选举和故障转移failover

   //kafka的写数据流程
    1.producer先从zookeeper的"/brokers/.../state" 节点找到该partition的leader
    2.producer将消息发送给该leader
    3.leader将消息写入本地log
    4.followers从leader pull消息,写入本地log后 leader发送 ACK
    5.leader收到所有 ISR(in-sync replicas)中的replica 的ACK后向producer发送ACK
    
    //消息存储方法(broker如何存储数据)
    物理上把topic分成一个或多个partition(对应server.properties中的num.partitions=3 配置),每个partition物理上对应一个文件夹(该文件夹存储该partition的所有消息和索引文件)
    
    //producer发送消息到broker时,会根据分区算法选择将其存储到哪一个partition
    1.指定了partition,这直接使用;
    2.未指定partition但指定key,通过对key的value进行hash选出一个partition
    3.partition和key都未指定,使用轮询挑选出一个partition
    
    
    //kafka log 存储读取的原理
        分段文件(segment)
            .log  .index  .timeindex
        稀疏索引(索引文件在kafka启动的时候,会加载到内存中)
    假设offset =48
    1.先根据分段文件的名称进行二分查找,找到offset在哪个分段文件中
    2.计算相对offset(48-分段文件的名称),根据相对的offset在索引文件中进行二分查找,找到相对offset对应的position
    3.根据offset对应的绝对的position去log文件中找
    4.最后读取Message对应的size来读取对应的数据
    
    
    //启动kafka集群
    /usr/local/kafka_2.11-0.10.2.1/bin/kafka-server-start.sh /usr/local/kafka_2.11-0.10.2.1/config/server.properties >> /var/kafka.log 2>&1 &
    
    //创建Topic
    /usr/local/kafka_2.11-0.10.2.1/bin/kafka-topics.sh --create --zookeeper hadoop01:2181,hadoop02:2181,hadoop03:2181 --replication-factor 3 --partitions 3 --topic user
    
    //查看所有的topic
    /usr/local/kafka_2.11-0.10.2.1/bin/kafka-topics.sh --list --zookeeper hadoop01:2181,hadoop02:2181,hadoop03:2181 
    
    //启动Producer
    /usr/local/kafka_2.11-0.10.2.1/bin/kafka-console-producer.sh --broker-list hadoop01:9092 --topic user
    
    //启动Consumer
    /usr/local/kafka_2.11-0.10.2.1/bin/kafka-console-consumer.sh --bootstrap-server hadoop01:9092,hadoop02:9092,hadoop03:9092 --from-beginning --topic user

猜你喜欢

转载自blog.csdn.net/LJ2415/article/details/85239785