了解kafka
Kafka是最初由Linkedin公司开发,是一个分布式、支持分区的(partition)、多副本的(replica),基于zookeeper协调的分布式消息系统,它的最大的特性就是可以实时的处理大量数据以满足各种需求场景:比如基于hadoop的批处理系统、低延迟的实时系统、storm/Spark流式处理引擎,web/nginx日志、访问日志,消息服务等等,用scala语言编写,Linkedin于2010年贡献给了Apache基金会并成为顶级开源 项目。
Kafka的特性
高吞吐量、低延迟:kafka每秒可以处理几十万条消息,它的延迟最低只有几毫秒
可扩展性:kafka集群支持热扩展
持久性、可靠性:消息被持久化到本地磁盘,并且支持数据备份防止数据丢失
容错性:允许集群中节点失败(若副本数量为n,则允许n-1个节点失败)
高并发:支持数千个客户端同时读写
Kafka场景应用
日志收集:一个公司可以用Kafka可以收集各种服务的log,通过kafka以统一接口服务的方式开放给各种consumer,例如hadoop、Hbase、Solr等。
消息系统:解耦和生产者和消费者、缓存消息等。
用户活动跟踪:Kafka经常被用来记录web用户或者app用户的各种活动,如浏览网页、搜索、点击等活动,这些活动信息被各个服务器发布到kafka的topic中,然后订阅者通过订阅这些topic来做实时的监控分析,或者装载到hadoop、数据仓库中做离线分析和挖掘。
运营指标:Kafka也经常用来记录运营监控数据。包括收集各种分布式应用的数据,生产各种操作的集中反馈,比如报警和报告。
流式处理:比如spark streaming和storm
事件源
一、kafka框架
Producer:消息生产者,就是向 Kafka broker 发消息的客户端。
Consumer:消息消费者,向 Kafka broker 取消息的客户端。
Consumer Group(CG):消费者组,由多个 Consumer 组成。消费者组内每个消费者负责消费不同分区的数据,一个分区只能由一个组内消费者消费;消费者组间互不影响。所有的消费者都属于某个消费者组,即消费者组是逻辑上的一个订阅者。
Broker:一台 Kafka 服务器就是一个 broker。一个集群由多个 broker 组成。一个 broker 可以容纳多个 topic。
Topic 主题: 类似于sql中的表,但是数据是半结构化的。相同类型的消息存放在同一个主题中。
Partition 分区: 主题中可以包含多个分区。把消息存在分区中就不可变更,当消息存在分区中会有一个偏移量(唯一的),可以通过偏移量来取对应的消息
Record 消息记录: 以键值对的形式存储,如果不写key那消息就会轮流写到不同的分区中,如果有key那就会写入相同key的分组中。
二、partitions副本
1、raplication-factor = 3 就是包含主分区在内一共有三个备份。
2、kafka会选择一个副本做为主分区,所有数据的写入就是写入到leader(主分区)中读取也是从leader中读取。follower只负责从leader中复制数据,保持数据的一致。
3、fakfa会监控副本数据之间的状态,在原数据维护一个叫ISR的集合,在下图中的例子中101、102、103三个副本可以保持数据的同步,那么ISR中就有[101,102,103]三个节点。如果有某个副本不能同步数据了那kafka就会在ISR中把这个节点踢出ISR,在这个节点数据同步追赶上后就再加入ISR
三、Broker 消息代理
broker负责消息的读写请求并将数据写入到磁盘(partitions)中,一个broker实例就是一台服务器,
四、kafka cluster (kafka集群)
kafka集群中的主题分为八个分区,每个broker中存放一个分区,raplication-factor = 3 分为三个副本,以第一个broker为例存放了p1的leader(主分区) 和p0、p2的副本,在这个broker的leader增加数据后在其他副本中同步数据。如果其中一台宕机后可以通过其他节点的副本数据中同步数据恢复节点使用。