zoukankan      html  css  js  c++  java
  • Kafka入门初探+伪集群部署

    Kafka是目前非常流行的消息队列中间件,常用于做普通的消息队列、网站的活性数据分析(PV、流量、点击量等)、日志的搜集(对接大数据存储引擎做离线分析)。

    全部内容来自网络,可信度有待考证!如有问题,还请及时指正。

    概念介绍

    在Kafka中消息队列分为三种角色:

    • producer,即生产者,负责产生日志数据。
    • broker,存储节点,负责按照topic中的partition分区,均匀分布式的存储分区。
    • consumer,即消费者,负责读取使用broker中的分区。

    producer

    Kafka系统中的生产者,用于产生数据并发送给broker进行存储。由于需要与broker中的分区保持socket连接,因此需要在zk中维护生产者与分区broker的对应关系。同一个topic下的数据,会以某种负载均衡的方式发送到不同的分区中。

    broker

    Broker可以当做Kafka中的存储节点,数据按照topic组织,按照某种负载均衡方式分配到不同的分区中。一个Topic由多个分区组成,每个分区可以设置备份数量。分区由一个leader+多个followers组成,生产者直接与leader进行沟通,leader接收消息后,其他的followers会同步这个消息。所有的follwers同步消息后,该消息才会成为可消费的状态。

    Broker中Topic与分区,分区与生产者,分区之间的选举备份等等信息都需要ZK进行协调。

    consumer

    Consumer是Kafka中的消费者,通常以组的形式存在,一个Group会包含多个Consumer。每个组对应一个Topic,该Topic内的分区只能对应一个消费者,也就是如果消费者很多的情况下,会出现有的消费者消费不到数据;如果消费者很少的情况下,会有消费者同时消费多个分区的数据。

    Kafka仅仅会保证一个分区的消息的消费是有序的,多个分区并不保证有序性。

    为了保证数据消费的可靠性,Kakka提供了几种消费的机制:

    • 1 at most once,即消费数据后,保存offset,就再也取不到这个数据了。
    • 2 at least once,即消费数据后,保存offset,如果保存出错,下次可能还会取到该数据
    • 3 exactly once,待查阅

    在Kafka中offset是由consumer维护的(实际可以由zk来完成)。这种机制有两个好处,

    • 一个是可以依据consumer的能力来消费数据,避免产生消费数据的压力;
    • 另一个就是可以自定义fetch消费的数据数目,可以一次读取1条,也可以1次读取100条。

    topic

    Kafka中的数据的主题,所有的操作(如消息的存储和读取消费)都是依据topic完成。

    partition

    每个Topic由多个分区组成,每个分区内部的数据保证了有序性,即是按照时间序列,append到分区的尾部。分区是有固定大小的,容量不够时,会创建新的分区。Kafka在一定时间内会定期清理过期的文件。

    这种连续性的文件存储,一方面有效的利用磁盘的线性存取;另一方面减轻了内存的压力。

    zookeeper

    在Kafka中很多节点的调度以及资源的分配,都要依赖于zookeeper来完成。
    如:

    • 1 Broker的注册,保存Broker的IP以及端口;
    • 2 Topic注册,管理broker中Topic的分区以及分布情况
    • 3 Broker的负载均衡,讲Topic动态的分配到broker中,通过topic的分布以及broker的负载判断
    • 4 消费者,每个分区的消息仅发送给一个消费者(不知道跟zookeeper有啥关系)
    • 5 消费者与分区的对应关系,存储在zk中
    • 6 消费者负载均衡,一旦消费者增加或者减少,都会触发消费者的负载均衡
    • 7 消费者的offset,High level中由zk维护offset的信息;Low Level中由自己维护offset

    伪集群环境的搭建

    部署伪集群环境,即单节点环境非常简单。下载部署文件,解压后,直接运行即可。

    运行命令如下:

    # 启动zookeeper
    bin/zookeeper-server-start.sh config/zookeeper.properties &  
    
    # 启动kafka
    bin/kafka-server-start.sh config/server.properties &  
    
    

    如果想要测试,可以启动测试程序:

    # 启动生产者测试程序
    ./kafka-console-producer.sh --broker-list localhost:9092 --topic test
    
    # 启动消费者测试程序
    ./kafka-console-consumer.sh --zookeeper localhost:2181 --topic test --from-beginning
    

    在生产者界面输入的内容,就可以直接在消费者界面中看到了。

  • 相关阅读:
    Java高级之类结构的认识
    14.8.9 Clustered and Secondary Indexes
    14.8.4 Moving or Copying InnoDB Tables to Another Machine 移动或者拷贝 InnoDB 表到另外机器
    14.8.3 Physical Row Structure of InnoDB Tables InnoDB 表的物理行结构
    14.8.2 Role of the .frm File for InnoDB Tables InnoDB 表得到 .frm文件的作用
    14.8.1 Creating InnoDB Tables 创建InnoDB 表
    14.7.4 InnoDB File-Per-Table Tablespaces
    14.7.2 Changing the Number or Size of InnoDB Redo Log Files 改变InnoDB Redo Log Files的数量和大小
    14.7.1 Resizing the InnoDB System Tablespace InnoDB 系统表空间大小
    14.6.11 Configuring Optimizer Statistics for InnoDB 配置优化统计信息用于InnoDB
  • 原文地址:https://www.cnblogs.com/xing901022/p/5730358.html
Copyright © 2011-2022 走看看