KafKa入门


kafka

Apache kafka是用Scala语言编写的高吞吐量,分布式的发布-订阅消息传递系统。由于它具有更高的吞吐量、可靠性和复制性,所以经常用来代替JMS和AMQP等传统消息代理,

kafka特点

  • 高吞吐量
    一个Kafka代理可以每秒处理数千个客户端的数百兆读写

  • 持久性
    消息被持久化到本地磁盘,并且支持数据备份防止数据丢失

  • 分布式
    数据副本冗余、流量负载均衡、可扩展

  • 实时性
    在系统之间构建实时数据流管道

kafka 架构及核心概念

一个典型的Kafka集群中包含若干Producer,若干broker(broker数量越多,集群吞吐率越高),若干Consumer Group,以及一个Zookeeper集群。Kafka通过Zookeeper管理集群配置,选举leader,在消费组发生变化时进行rebalance(新版本不依赖)。Producer使用push模式将消息发布到broker,Consumer使用pull模式从broker订阅并消费消息。

  • Broker
    Kafka集群包含一个或多个服务器,这种服务器被称为broker;

  • Message
    消息是Kafka中最基本的数据单元,主要有key和value构成;真正有效的是消息是value数据,key只是作为消息路由分区使用;

  • Topic
    每条发布到Kafka集群的消息都有一个类别,这个类别被称为Topic。(物理上不同Topic的消息分开存储,逻辑上一个Topic的消息虽然保存于一个或多个broker上但用户只需指定消息的Topic即可生产或消费数 据而不必关心数据存于何处),强调的是kafka不保证topic消息有序;

  • Partition
    Parition是物理上的概念,每个Topic包含一个或多个Partition;kafka只保证一个partiton是有序的;通过配置来设置partition中的文件大小和文件保留策略;

  • Producer
    负责发布消息到Kafka broker;

  • Consumer
    消息消费者,向Kafka broker读取消息的客户端;

  • Consumer Group
    官方称为逻辑上的订阅者,每个Consumer属于一个特定的Consumer Group(可为每个Consumer指定group name,若不指定group name则属于默认的group),消息的单播和多播都是基于消费组来实现的,消费组中的消费者不是越多越好,消费者数量超过分区数量时,回导致消费者分配不到资源,造成资源浪费;

  • Offset
    每个partition都由一系列有序的、不可变的消息组成,这些消息被连续的追加到partition中。partition中的每个消息都有一个连续的序列号叫做offset,用于partition唯一标识一条消息。

kafka高吞吐量和低延迟的原因

  • kafka的生产者和消费者均支持批量处理数据,指定缓存的消息达到某个量的时候就发出去,这大大减少了网络开销。
  • 数据以追加的方式写入磁盘
  • 使用sendfile实现零拷贝I/O
  • 在一个消费者与生产者大致处于同一水平的系统中,它基本上是从缓存中读取数据,这使得端到端延迟非常低

你可能感兴趣的:(KafKa入门)