kafka简介:web
kafka是一个发布订阅消息系统,由topic区分消息种类,每一个topic中能够有多个partition,每一个kafka集群有一个多个broker服务器组成,producer能够发布消息到kafka中,consumer能够消费kafka中的数据。kafka就是生产者和消费者中间的一个暂存区,能够保存一段时间的数据保证使用。
缓存
kafka+zookeeper服务器
zookeeper做为解决分布式一致性问题的工具而被kafka依赖。而分布式模式,即去中心化的集群模式,须要让消费者知道如今有哪些生产者(对于消费者而言,kafka就是生产者)是可用的。若是没了zk消费者如何知道呢?若是每次消费者在消费以前都去尝试链接生产者测试下是否链接成功,效率就会变得很低。app
Kafka使用zk的分布式协调服务,将生产者,消费者,消息储存(broker,用于存储信息,消息读写等)结合在一块儿。同时借助zk,kafka可以将生产者,消费者和broker在内的全部组件在无状态的条件下创建起生产者和消费者的订阅关系,实现生产者的负载均衡。负载均衡
1. broker在zk中注册分布式
kafka的每一个broker(至关于一个节点,至关于一个机器)在启动时,都会在zk中注册,告诉zk其brokerid,在整个的集群中,broker.id/brokers/ids,当节点失效时,zk就会删除该节点,就很方便的监控整个集群broker的变化,及时调整负载均衡。工具
2. topic在zk中注册oop
在kafka中能够定义不少个topic,每一个topic又被分为不少个分区。通常状况下,每一个分区独立在存在一个broker上,全部的这些topic和broker的对应关系都有zk进行维护测试
3. consumer(消费者)在zk中注册日志
1)注册新的消费者,当有新的消费者注册到zk中,zk会建立专用的节点来保存相关信息,路径ls /consumers/{group_id}/ [ids,owners,offset],Ids:记录该消费分组有几个正在消费的消费者,Owmners:记录该消费分组消费的topic信息,Offset:记录topic每一个分区中的每一个offset
2)监听消费者分组中消费者的变化 ,监听/consumers/{group_id}/ids的子节点的变化,一旦发现消费者新增或者减小及时调整消费者的负载均衡。
4. kafka的应用场景
1)日志收集:一个公司的各类应用均可以做为生产者将日志吐到kafka,再由hbase,solr,es等来消费kafka的日志做统计,查错。
2)消息系统:解耦和生产者和消费者、缓存消息等。
3)用户活动跟踪:Kafka常常被用来记录web用户或者app用户的各类活动,如浏览网页、搜索、点击等活动,这些活动信息被各个服务器发布到kafka的topic中,而后订阅者经过订阅这些topic来作实时的监控分析,或者装载到hadoop、数据仓库中作离线分析和挖掘。
4)运营指标:Kafka也常常用来记录运营监控数据。包括收集各类分布式应用的数据,生产各类操做的集中反馈,好比报警和报告