在大量使用分布式数据库、分布式计算集群的时候:
-想分析一下用户行为,以便能设计出更好的广告位;
-想对用户的搜索关键词进行统计,分析出前的流行趋势;
-有些数据,存数据库浪费,直接存硬盘操作效率又低;
共同特征:
数据由上游模块产生,下游模块使用上游模块数据进行计算、处理、统计和分析,此时就可以使用消息系统特别是分布式消息系统。
kafka的定义:是一个分布式消息系统,有LinkedIn使用Scala编写,用LinkedIn的活动流(Activity Stream)和运营数据处理管道(Pipeline)的基础,具有高水平扩展和高吞吐量。
应用领域:
用作多种类型的数据管道和消息系统。
目前越来越多的开源分布式处理系统如用于数据收集的Apache flume、用于实时数据处理的Apache Storm、用于内存数据处理的Spark 、用于全文检索的elasticsearch都支持与Kafka集成。
消息系统:
ActiveMQ 不支持动态扩容
RabbitMQ 不支持动态扩容
Kafka 通过ZooKeeper动态扩容
ZooKeeper是一个在分布式系统中,广泛被用来作为分布式状态管理、分布式协调管理、分布式配置管理、分布式锁服务的集群。
AMQP协议
producer -push-> broker <-pull-consumer
一个broker即是Kafka的消息实例
Kafka客户端支持大部分主流语言
Kafka架构:
主题(Topic):在工程中通常一个业务一个主题。
分区(Partition):一个topic中的消息数据按照多个分区组织,分区是kafka消息队列组织的最小单位,一个分区可以看做是一个FIFO的队列。
备份(Replication):为了保证分布式可靠性,kafaka0.8开始对每个分区的数据进行备份(不同Broker上),防止其中一个Broker宕机造成分区数据不可用。