Apache Kafka是分布式发布-订阅消息系统,在 kafka官网上对 kafka 的定义:一个分布式发布-订阅消息传递系统。 它最初由LinkedIn公司开发,Linkedin于2010年贡献给了Apache基金会并成为顶级开源项目。Kafka是一种快速、可扩展的、设计内在就是分布式的,分区的和可复制的提交日志服务。web
它的架构包括如下组件:segmentfault
一、话题(Topic):是特定类型的消息流。消息是字节的有效负载(Payload),话题是消息的分类名或种子(Feed)名;缓存
二、生产者(Producer):是可以发布消息到话题的任何对象;服务器
三、服务代理(Broker):已发布的消息保存在一组服务器中,它们被称为代理(Broker)或Kafka集群;架构
四、消费者(Consumer):能够订阅一个或多个话题,并从Broker拉数据,从而消费这些已发布的消息;并发
上图中能够看出,生产者将数据发送到Broker代理,Broker代理有多个话题topic,消费者从Broker获取数据。app
咱们将消息的发布(publish)称做 producer,将消息的订阅(subscribe)表述为 consumer,将中间的存储阵列称做 broker(代理),这样就能够大体描绘出这样一个场面:负载均衡
生产者将数据生产出来,交给 broker 进行存储,消费者须要消费数据了,就从broker中去拿出数据来,而后完成一系列对数据的处理操做。框架
kafka 官方给出的图:分布式
多个 broker 协同合做,producer 和 consumer 部署在各个业务逻辑中被频繁的调用,三者经过 zookeeper管理协调请求和转发。这样一个高性能的分布式消息发布订阅系统就完成了。
图上有个细节须要注意,producer 到 broker 的过程是 push,也就是有数据就推送到 broker,而 consumer 到 broker 的过程是 pull,是经过 consumer 主动去拉数据的,而不是 broker 把数据主懂发送到 consumer 端的。
(1)不管是kafka集群,仍是producer和consumer都依赖于zookeeper来保证系统可用性集群保存一些meta信息。
(2)Kafka使用zookeeper做为其分布式协调框架,很好的将消息生产、消息存储、消息消费的过程结合在一块儿。
(3)同时借助zookeeper,kafka可以生产者、消费者和broker在内的因此组件在无状态的状况下,创建起生产者和消费者的订阅关系,并实现生产者与消费者的负载均衡。
kafka每秒能够处理几十万条消息,它的延迟最低只有几毫秒,每一个topic能够分多个partition, consumer group 对partition进行consume操做。
kafka集群支持热扩展
消息被持久化到本地磁盘,而且支持数据备份防止数据丢失
容许集群中节点失败(若副本数量为n,则容许n-1个节点失败)
支持数千个客户端同时读写
Kafka的使用场景:
一个公司能够用Kafka能够收集各类服务的log,经过kafka以统一接口服务的方式开放给各类consumer,例如hadoop、Hbase、Solr等。
解耦和生产者和消费者、缓存消息等。
Kafka常常被用来记录web用户或者app用户的各类活动,如浏览网页、搜索、点击等活动,这些活动信息被各个服务器发布到kafka的topic中,而后订阅者经过订阅这些topic来作实时的监控分析,或者装载到hadoop、数据仓库中作离线分析和挖掘。
Kafka也常常用来记录运营监控数据。包括收集各类分布式应用的数据,生产各类操做的集中反馈,好比报警和报告。
好比spark streaming和storm