概述

百度消息服务(Baidu Messaging System BMS)是全兼容Apache Kafka的分布式、高可扩展、高通量的托管消息队列服务,您可以直接享用Kafka带来的先进功能而无需考虑集群运维,并按照使用量付费。

Kafka在网络中的位置和作用

本章节以开发新一代互联网应用的发展历程为例,介绍Kafka在网络中的位置和作用。

  • 第一阶段,首次搭建应用网络如下:

    • Web应用部署在云服务器上,为个人电脑或移动用户提供访问服务。
    • SQL数据库为Web应用提供数据持久化和数据查询。

  • 第二阶段:基于业务的迅速发展,网络扩容如下:

    • 增加缓存服务,从而降低SQL数据库的荷载。
    • 搜集日志保存至Hadoop做离线处理,从而更加理解用户行为。
    • 数据汇总至数据仓库,从而获取交互式报表。
    • 加入实时模块和外部数据交互等等。

    网络扩容后的问题如下:

    • 不同系统之间的数据同步
    • 系统扩展问题
  • 第三阶段:新增Kafka模块提供消息队列,Web应用数据只需向队列中添加数据,网络中的各组件从队列中依次读取数据并自行处理,如下图所示:

    网络扩容带来的问题迎刃而解,而且降低了系统组网复杂度;降低编程复杂度,各个子系统不在是相互协商接口,各个子系统类似插口插在插座上,Kafka承担高速数据总线的作用。

Apache Kafka简介

Apache Kafka是分布式的流数据平台,具有三大特性:

  • 提供Pub/Sub方式的海量消息处理。

    Kafka提供的Pub/Sub就是典型的异步消息交换,消息的发布者(Pub)只需指定消息的类别,而无需与订阅者(Sub)交互;订阅者只接受订阅的一个或几个类型的消息。发布者与订阅者的解耦可独立的扩展或修改接口两边的处理过程。例如,您可以为服务器日志或者物联网设备创建不同主题(Topic),之后数据便可持续发送到各个主题,后端数据仓库、流式分析或者全文检索等对接特定主题,无需关注服务器或者物联网设备。

    同时,Kafka将主题划分为多个分区(Partition),并根据分区规则选择消息存储的分区。若分区规则设置合理,则所有的消息被均匀的分布到不同的分区中,可实现负载均衡和水平扩展。

  • 以高容错的方式存储海量数据流。

    多个订阅者可以从一个或者多个分区中同时消费数据,以支撑海量数据处理能力。同时为了保证数据的可靠性,Kafka为每个分区设置一个Leader,Leader负责所有的读写操作,Follower只与Leader同步消息。消息写入分区时,Leader为自己和Follower复制数据做多个备份,如果Follower失效,Kafka会从另外的Follower处同步Leader的历史消息;如果Leader失效,其他Follower成为新的Leader继续服务。

  • 保证数据流的顺序。

    每个发布者发送到Kafka分区中的消息是确保顺序的,订阅者可以依赖这个承诺进行后续处理。顺序写磁盘的效率比随机写内存高,是Kafka高吞吐率的重要保证之一。

百度消息服务综述

百度消息服务是基于Apache Kafka的分布式、高可扩展、高通量、多分区和多副本的托管消息队列服务。百度消息服务封装了Kafka集群细节,并以托管服务形式提供,您可以直接使用百度消息服务创建主题来集成大规模分布式应用,而无需考虑集群运维,仅按照使用量支付处理数据的费用。相对于传统的消息服务,百度消息服务有以下特点:

  • 可通过分区(Partition)实现主题水平扩展。
  • 分区分布在多个节点上以达到高通量。
  • 通过消费者组(Consumer Group)来支持单个消费者以队列或者Pub/Sub形式的消息消费,或者多个消费者集群顺序消费消息。
  • 生产者和消费者异步交互,而不需要彼此等待。

产品优势

  • 一键部署:开通即使用百度消息服务,专注产品开发即可,无需耗费精力安装、部署、配置、调试和维护集群。
  • 低廉价格:无需任何硬件软件投入,只需开通服务并且为使用的资源付费。由于与社区的Kafka兼容,迁移成本极低,且不用担心被技术锁定。
  • 数据安全:消息中心仅支持SSL加密的数据传输,以保证数据在传输的过程中不被窃听或者篡改,保证客户数据的安全。
  • 可靠耐用:独特的高可用特性设计,防止数据在应用程序故障、个别机器故障或设施故障时丢失。

业务场景

  • 采集网站、设备或应用程序的海量用户浏览、点击、搜索等数据以便实时分析。
  • 汇总分布式应用的遥感数据方便系统运维。
  • 对接百度MapReduce提供的Spark Streaming实现实时流数据分析。