一、kafka简介
kafka是Linkedin于2012年12月份开源的消息系统
kafka是一个分布式的,基于发布/订阅的消息系统;
kafka:一个队列平台,不仅支持离线,还支持在线
特点:
- --消息持久化:通过O(1)的磁盘数据结构提供数据的持久化;针对磁盘存储做了大量的优化,提高了磁盘存储的效率;主要针对了操作系统的特性来进行优化:预读、后写:针对磁盘的顺序访问,优化了写磁盘的机制,降低了写磁盘的次数,提高了写磁盘的速率
- --高吞吐量:每秒百万级的消息读写
- --分布式:扩展能力强
- --多客户端支持:java、php、python、C++......
- --实时性:生产者生产的message立即被消费者可见;其中message为kafa的数据单位
二、kafka基本组件
- broker:每一台机器叫一个broker
- producer:日志消息生产者,用来写数据;
- consumer:消息的消费者,用来读数据,可以订阅一个或者多个话题,从broker拉数据,从而消费这些已发布的消息;
- topic:不同消费者去指定的topic中读,不同的生产者往不同的topic中写;topic就类似于一个话题,是一个逻辑概念;然后话题的发布者(producer)可以有很多的粉丝(consumer),然后consumer可以订阅producer生产的topic;producer和consumer之间可以有多个topic;
- partition:在topic基础上做了进一步的区分分层;是topic的物理实现
从上图可以看出,生产者将数据发送给Broker代理,Broker代理有多个话题topic,消费者从Broker获取数据。
kafka使用场景
日志收集:公司可以用kafka手机各种服务器的log,通过kafka以统一的接口服务的方式开发给各种consumer,例如Hadoop、Hbase、Solr等
消息系统:解耦生产者和消费者,魂村消息等
用户活动跟踪:kafka经常被用来记录web用户或者app用户的各种活动,如浏览网页,搜索,点击等活动,这些活动信息被各个服务器发布到kafka的topic中,然后订阅者通过订阅这些topic来做实时的监控分析,或者装载到hadoop,数据仓库中做离线分析和挖掘
运营指标:kafka也经常用来记录运营监控数据,包括收集各种分布式应用的数据,生产各种操作的集中反馈,比如报警和报告。
流式处理:比如spark streaming和storm