• kafka简介


    1.消息队列(MessageQueue MQ)

    1. 消息队列是在消息的传输过程中保存消息的容器。
    2. 消息队列的分类(点对点 发布订阅)
      • 点对点(p2p)
      • 发布订阅(Pub/Sub)
    3. 点对点和发布订阅的区别
    4. 消息队列的好处
      • 解耦
      • 异步
      • 削峰/限流
      • 冗余
      • 扩展
      • 可恢复性
    5. 常见的消息系统
      RabbitMQ、ZeroMQ、Redis、Kafka.....

    2.kafka简介

    1. Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写。
    2. Kafka是一种高吞吐量的,持久性的,分布式发布订阅消息系统,同时支持在线和离线处理
      • 高吞吐量:即使是非常普通的硬件Kafka也可以支持每秒数百万的消息
      • 持久性
      • 分布式
    3. 官网:http://kafka.apache.org/(中文:http://kafka.apache.org/)
    4. 功能
      • Kafka的功能简单来说就是可以传输数据以及处理数据。也可以说是面向数据流的生产,转换,存储,消费为整体的处理平台。
    5. 应用场景
      • 构造实时流数据管道,它可以在系统或应用之间可靠地获取数据。 (相当于message queue)
      • 构建实时流式应用程序,对这些流数据进行出处理(转换或者影响)。 (就是流处理,通过kafka stream topic和topic之间内部进行变化)
      • 比如日志实时数据采集处理用:flume和kafka

    3.kafka核心概念

    1. 主题(Topic):
      • 逻辑上的一个概念,对消息进行不同分类。
      • Kafka当中每个消息都属于一个主题,每个主题下有任意数量的消息。
      • 一个主题可以有一个或多个生产者,也可以有零个、一个或多个消费者。
    2. 代理(Broker)
      • broker存储topic数据,生产者将消息发送个broker, 消费者从broker当中获取消息。
      • Kafka服务部署的一个节点,我们可以把部署了KafkaServer的这台机器看做是一个Broker;一般broker数量越多,集群吞吐量越高
      • 一般一个Kafka集群会有多个节点(broker);
        • 如果某topic有N个partition,集群有N个broker,那么每个broker存储该topic的一个partition。
        • 如果某topic有N个partition,集群有(N+M)个broker,那么其中有N个broker存储该topic的一个partition,剩下的M个broker不存储该topic的partition数据。
        • 如果某topic有N个partition,集群中broker数目少于N个,那么一个broker存储该topic的一个或多个partition。在实际生产环境中,尽量避免这种情况的发生,这种情况容易导致Kafka集群数据不均衡。
    3. 分区(Partition)
      • 每个topic都可以被划分成一个或者多个分区(每个主题至少有一个分区),它是topic物理上的分组,在创建topic的时候指定
      • 一个Partition只对应一个Broker,一个Broker可以管理多个Partition。
      • 在一个分区内消息是顺序的,在不同的分区之间,kafka并不保证消息的顺序
      • 分区下又分的一个Leader和(0或者多个)Follower
      • 每个partition是一个目录,由多个segment组成,每个segment存着message,由(index、log)等组成,存储在磁盘中
    提高kafka并行度,其实就是提高kafka topic分区的个数,分区个数提高了,同一时间同一消费组内可以有的消费者可以更多,消费能力增强。一般分区和消费组内的消费者保持对应
    1. Message(消息)
      • 每个消息(也叫记录record,我习惯叫消息)是由一个key,一个value和时间戳构成
    2. 生产者(Producer)
      • 生产者就是消息的创造者,发布消息,可以是一个或者多个
    3. 消费者(Consumer)
      • 消费者订阅消息(可订阅一个或多个主题),不断地从消息队列当中获取消息并处理,可以是一个或者多个
      • 消费者数量不应大于partition数量,否则会有消费者消费不到数据,浪费资源
    4. 集群(Cluster)
      • 集群指的是多个broker构成的一个整体,对外提供一定的服务。主要是为了保证其中一个broker挂了之后,kafka还能正常使用。集群当中的各个broker之间通过心跳的方式来确定其他机器是否存活。
    5. 控制器(Controller)
      • 控制器是集群当中的概念,每个集群都会选择一个broker来担任控制器的角色。在一个集群当中,控制器这台broker会控制其他的broker实现相应的功能。控制器主要是负责kafka分区状态,管理每个分区的副本状态,监听zookeeper中数据的变化并作出相应的反馈。所有的broker都会监听Controller的状态,当controller出现故障时,会选举一个新的broker作为controller。
    6. 消费者组(Consumer Group)
      • kafka当中多个消费者可以组成一个消费者组。
      • 消费者组的主要作用是用来实现单播和广播。
      • 单播:一个消息只能被一个消费者所消费,可将这些消费者放在同一个消费组当中。因为一个消费者组可以确保其订阅的topic每个分区只能被从属于该消费者组当中的一个消费者所消费。
      • 多播:一个消息可被多个消费者所消费,可将这些消费者放在不同的消费者组中。如果不同的消费者组订阅了同一个topic,那么这些消费者组之间是彼此独立的,不会受到干扰。

    4.Kafka有四个核心的API:

    1. The Producer API 允许一个应用程序发布一串流式的数据到一个或者多个Kafka topic。
    2. The Consumer API 允许一个应用程序订阅一个或多个 topic ,并且对发布给他们的流式数据进行处理。
    3. The Streams API 允许一个应用程序作为一个流处理器,消费一个或者多个topic产生的输入流,然后生产一个输出流到一个或多个topic中去,在输入输出流中进行有效的转换。
    4. The Connector API 允许构建并运行可重用的生产者或者消费者,将Kafka topics连接到已存在的应用程序或者数据系统。比如,连接到一个关系型数据库,捕捉表(table)的所有变更内容。
  • 相关阅读:
    文件操作
    数据补充
    小数据池
    列表
    基础知识1
    我的Python之旅开始
    正则
    模块
    迭代器与生成器
    文件操作
  • 原文地址:https://www.cnblogs.com/oneLittleStar/p/13514740.html
Copyright © 2020-2023  润新知