kafka 第一章 入门

本章大纲

  • 什么是消息队列

  • 什么是kafka

  • kafka作用

  • kafka应用场景

 

讲kafka之前咱们先了解一下什么是消息队列

 

1. 消息队列

1.1 什么是消息队列

消息 Message

网络中的两台计算机或者两个通讯设备之间传递的数据。例如说:文本、音乐、视频等内容。

队列 Queue

队列 Queue 是一种先进先出的数据结构(数据元素首尾相接),

特殊之处在于只允许在首部删除元素和在尾部追加元素,入队、出队。

消息队列(Message Queue ) 简称MQ

我们可以把消息队列比作是一个存放消息的容器,

保存消息的队列。消息的传输过程中的容器;主要提供生产、消费接口供外部调用做数据的存储和获取。

1.2 为什么要用消息队列

  • 解耦 各系统之间通过消息系统这个统一的接口交换数据,无须了解彼此的存在

  • 冗余 部分消息系统具有消息持久化能力,可规避消息处理前丢失的风险

  • 扩展 消息系统是统一的数据接口,各系统可独立扩展

  • 峰值处理能力 消息系统可顶住峰值流量,业务系统可根据处理能力从消息系统中获取并处理对应量的请求

  • 可恢复性 系统中部分键失效并不会影响整个系统,它恢复会仍然可从消息系统中获取并处理数据

  • 异步通信 在不需要立即处理请求的场景下,可以将请求放入消息系统,合适的时候再处理

1.3 消息队列分类

MQ主要分为两类:点对点(P2P)、发布订阅(Pub/Sub)

  • Peer-to-Peer:一般基于Pull或者Polling接收数据 发送到队列中的消息被一个而且仅仅一个接收者所接受,即使有多个接收者在同一个队列中侦听同一消息 即支持异步“即发即收”的消息传递方式,也支持同步请求/应答传送方式

  • 发布订阅:发布到同一个主题的消息,可被多个订阅者所接收 发布/订阅即可基于Push消费数据,也可基于Pull或者Polling消费数据 解耦能力比P2P模型更强

1.4 P2P和发布订阅的比较

  • 共同点:

    消息生产者生产消息发送到queue中,然后消息消费者从queue中读取并且消费消息。

  • 不同点:

    P2P模型包括:消息队列(Queue)、发送者(Sender)、接收者(Receiver) 一个生产者生产的消息只有一个消费者(Consumer)(即一旦被消费,消息就不在消息队列中)。比如说打电话

    pub/Sub包含:消息队列(Queue)、主题(Topic)、发布者(Publisher)、订阅者(Subscriber) 每个消息可以有多个消费者,彼此互不影响。比如我发布一个朋友圈:关注我的人都能够看到。

1.5 常见的消息队列系统

  • RabbitMQ Erlang编写,支持多协议AMQP,XMPP,SMTP,STOMP。支持负载均衡、数据持久化。同时支持Peer-to-Peer和发布/订阅模式。

  • Redis 基于Key-Value对的NoSQL数据库,同时支持MQ功能,可做轻量级队列服务使用。就入队操作而言,Redis对短消息(小于10kb)的性能比RabbitMQ好,长消息性能比RabbitMQ差。

  • ZeroMQ 轻量级,不需要单独的消息服务器或中间件,应用程序本身扮演该角色,Peer-to-Peer。它实质上是一个库,需要开发人员自己组合多种技术,使用复杂度高。

  • ActiveMQ JMS实现,Peer-to-Peer,支持持久化、XA(分布式)事务

  • Kafka/Jafka 高性能跨语言的分布式发布/订阅消息系统,数据持久化,全分布式,同时支持在线和离线处理

  • MetaQ/RocketMQ 纯Java实现,发布/订阅消息系统,支持本地事务和XA分布式事务

 

上面对消息队列进行了简单对介绍,开始本章正题kafka入门介绍

 

2. Kafka

2.1 kafka简介

Kafka是分布式的发布—订阅消息系统。它最初由LinkedIn(领英)公司发布,使用Scala语言编写,与2010年12月份开源,成为Apache的*项目。Kafka是一个高吞吐量持久性分布式发布订阅消息系统。并依赖于zookeeper,它主要用于处理活跃live的数据(登录、浏览、点击、分享、喜欢等用户行为产生的数据)。

官网地址:http://kafka.apache.org

2.2 设计目标

  • 高吞吐率 在廉价的商用机器上单机可支持每秒100万条消息的读写

  • 消息持久化 所有消息均被持久化到磁盘,无消息丢失,支持消息重放

  • 完全分布式 Producer,Broker,Consumer均支持水平扩展

  • 同时适应在线流处理和离线批处理

     

    2.3 kafka核心组件

    对于kafka而言,kafka服务就像是一个大的水池。不断的生产、存储、消费着各种类别的消息。那么kafka由何组成呢?

    • Topic:主题,Kafka处理的消息的不同分类。

    • Broker:消息服务器代理,Kafka集群中的一个kafka服务节点称为一个broker,

      主要存储消息数据。存在硬盘中。每个. topic都是有分区的。

    • Partition:Topic物理上的分组,一个topic在broker中被分为1个或者多个partition,分区在创建topic的时候指定。

    • Message:消息,是通信的基本单位,每个消息都属于一个partition Kafka服务相关

    • Producer:消息和数据的生产者,向Kafka的一个topic发布消息。

    • Consumer:消息和数据的消费者,定于topic并处理其发布的消息。

    • Zookeeper:协调kafka的正常运行。

     

    2.4 kafka运行原理

    kafka对外使用topic的概念,生产者往topic里写消息,消费者从读消息。为了做到水平扩展,一个topic实际是由多个partition组成的,遇到瓶颈时,可以通过增加partition的数量来进行横向扩容。单个parition内是保证消息有序。每新写一条消息,kafka就是在对应的文件append写,所以性能非常高。

     

     

     

     

     

     

     

上一篇:Hyperledger交易流程


下一篇:Squid集群做CDN全网加速