1、kafka 简介
Kafka是最初由Linkedin公司开发,是一个分布式、支持分区的(partition)、多副本的(replica)、 基于zookeeper协调的分布式消息系统,它最大的特性就是可以实时的处理大量数据以满足各种需求场景:比如基于hadoop的批处理系统、低延迟的实时系统、Storm/Spark流式处理引擎、web/nginx 日志、访问日志、消息服务等等,用scala语言编写,Linkedin于2010年贡献给了Apache基金会并成为其顶级开源项目。
优势:
高吞吐量、低延迟:kafka每秒可以处理几十万条消息,它的延迟最低只有几毫秒;
可扩展性:kafka集群支持热扩展;
持久性、可靠性:消息被持久化到本地磁盘,并且支持数据备份防止数据丢失;
容错性:允许集群中节点故障(若副本数量为n,则允许n-1个节点故障);
高并发:支持数千个客户端同时读写。
版本演进:
Kafka 0.8 之后引入了副本机制, Kafka 成为了一个分布式高可靠消息队列解决方案。
0.8.2.0 版本社区引入了新版本 Producer API , 需要指定 Broker 地址,但是bug比较多。
0.9.0.0 版本增加了基础的安全认证 / 权限功能,同时使用 Java 重写了新版本 Consumer API ,还 引入了 Kafka Connect 组件用于实现高性能的数据抽取,同样bug也多 。
0.10.0.0 是里程碑式的大版本,因为该版本引入了 Kafka Streams。从这个版本起,Kafka 正式升级成分布式流处理平台 。0.11.0.0 版本,引入了两个重量级的功能变更:一个是提供幂等性 Producer API 以及事务 (Transaction) API ; 另一个是对 Kafka 消息格式做了重构。
1.0和2.0 主要是对Kafka Streams 的各种改进,在消息引擎方面并未引入太多的重大功能特性
2、术语
Record(消息): Kafka 处理的主要对象。
Topic(主题):主题是承载消息的逻辑容器,在实际使用中多用来区分具体的业务。 Kafka中的 Topics总是多订阅者模式,一个topic可以拥有一个或者多个消费者来订阅它的数据。
Partition(分区):一个有序不变的消息序列。每个Topic下可以有多个分区。
Offset(消息位移):表示分区中每条消息的位置信息,是一个单调递增且不变的值。
Replica(副本): Kafka 中同一条消息能够被拷贝到多个地方以提供数据冗余,这些地方就是所谓的副本。副本还分为领导者(leader)副本和追随者(follower)副本,各自有不同的角色划分。副本是在分区层级下的,即每个分区可配置多个副本实现高可用。
Broker(代理) :Kafka以集群的方式运行,集群中的每一台服务器称之为一个代理(broker) 。
Producer(生产者):消息生产者,向Broker发送消息的客户端。
Consumer(消费者):消息消费者,从Broker读取消息的客户端。
Consumer Offset(消费者位移):表征消费者消费进度,每个消费者都有自己的消费者位移。
Consumer Group(消费者组):每个Consumer属于一个特定的Consumer Group,一条消息可以被多个不同的 Consumer Group消费,但是一个 Consumer Group中只能有一个Consumer 能够消费该消息。
每一个Topic,下面可以有多个分区(Partition)日志文件 。 Partition是一个有序的message序列,这些 message按顺序添加到一个叫做commit log的文件中。每个partition中的消息都有一个唯一的编号, 称之为offset,用来唯一标示某个分区中的message。 每个consumer是基于自己在commit log中的消费进度(offset)来进行工作的。在kafka中,消费offset由consumer自己来维护;一般情况下我们按照顺序逐条消费commit log中的消息,当然我可以通过指定offset来重复消费某些消息,或者跳过某些消息。
传统的消息传递模式有2种:queue 和 publish-subscribe
queue模式:多个consumer从服务器中读取数据,消息