|
分布式发布订阅消息系统在数据采集中扮演着重要的角色。Kafka是由LinkedIn公司开发的一种高吞吐量的分布式发布订阅消息系统,用户通过Kafka系统可以发布大量的消息,同时也能实时订阅消费消息。在Kafka之前,市场上已经存在RabbitMQ、Apache ActiveMQ等传统的消息系统,Kafka与这些传统的消息系统相比,有以下不同:(1)Kafka是分布式系统,易于向外扩展;(2)同时为发布和订阅提供高吞吐量;(3)支持多订阅者,当失败时能自动平衡消费者;(4)支持将消息持久化到磁盘,因此可用于批量消费,例如 ETL以及实时应用程序。 Kafka设计的初衷是构建一个可以处理海量日志、用户行为和网站运营统计等的数据处理框架。为了满足上述应用需求,就需要同时提供实时在线处理的低延迟和批量离线处理的高吞吐量。现有的一些消息队列框架,通常设计了完备的机制来保证消息传输的可靠性,但是由此会带来较大的系统负担,在批量处理海量数据时无法满足高吞吐率的要求;另外有一些消息队列框架则被设计成实时消息处理系统,虽然可以带来很高的实时处理性能,但是在面对批量离线场合时却无法提供足够的持久性,即可能发生消息丢失。同时,在大数据时代涌现的新的日志收集处理系统(Flume、Scribe等)往往更擅长批量离线处理,而不能较好地支持实时在线处理。相对而言,Kafka可以同时满足在线实时处理和批量离线处理。 Kafka具有以下良好的特性: (1) 高吞吐量、低延迟:Kafka每秒可以处理几十万条消息,它的延迟最低只有几毫秒; (2) 可扩展性:Kafka集群具有良好的可扩展性; (3) 持久性、可靠性:消息被持久化到本地磁盘,并且支持数据备份,防止数据丢失; (4) 容错性:允许集群中节点失败,若副本数量为n,则允许n-1个节点失败; (5) 高并发:支持数千个客户端同时读写。使用消息队列能够使关键组件顶住突发的访问压力,而不会因为突发的超负荷的请求而完全崩溃; (6) 顺序保证:在大多使用场景下,数据处理的顺序都很重要。大部分消息队列本来就是排序的,并且能保证数据会按照特定的顺序来处理。Kafka保证一个分区内的消息的有序性; (7) 异步通信:很多时候,用户不想也不需要立即处理消息。消息队列提供了异步处理机制,允许用户把一个消息放入队列,但并不立即处理它。想向队列中放入多少消息就放多少消息,然后在需要的时候再去处理它们。 Kafka的主要应用场景包括: (1) 日志收集:一个公司可以用Kafka收集各种日志,这些日志被Kafka收集以后,可以通过Kafka的统一接口服务开放给各种消费者,例如Hadoop、HBase、Solr等; (2) 消息系统:可以对生产者和消费者实现解耦,并可以缓存消息; (3) 用户活动跟踪:Kafka经常被用来记录Web用户或者APP用户的各种活动,如浏览网页、搜索、点击等活动,这些活动信息被各个服务器发布到Kafka的主题(Topic)中,然后订阅者通过订阅这些主题来做实时的监控分析,或者装载到Hadoop、数据仓库中做离线分析和挖掘; (4) 运营指标:Kafka也经常用来记录运营监控数据,包括收集各种分布式应用的数据,生产环节各种操作的集中反馈,比如报警和报告; (5) 流式处理:Kafka实时采集的数据可以传递给流处理框架(比如Spark Streaming和Storm)进行实时处理。 【出处】林子雨.大数据导论.人民邮电出版社,2020年9月第1版.
|