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
- 在一个消费者与生产者大致处于同一水平的系统中,它基本上是从缓存中读取数据,这使得端到端延迟非常低














网友评论