高效实用Kafka-入门介绍

导语:
  随着大数据的到来,对于数据的处理显得很重要,对于数据信息所蕴含的价值也越来越多的得到的展现。但是随着数据量的增加,怎么样可以更加高效的收集并且分析数据成了一个重头戏。而对于Kafka来说其实是作为一个消息系统存在。下面就来带着大家一起分析一下业内比较主流的消息系统消息中间件Kafka。首先提到Kafka就不得不说说消息中间件技术,消息中间件技术是为了解决系统间消息的调用而运用而生,而后有出现了很多的优秀的消息中间件 例如ActiveMQ、RocketMQ、RabbitMQ。而下面主要来介绍的就是Kafka

  在分享Kafka之前,首先带大家来了解一下消息系统的分类。这样可以有助于我们更好的理解Kafka。

消息系统的分类

Peer-to-Peer(P2P)

在这里插入图片描述
特点

  • 一般是基于Pull或者是Polling接收消息
  • 发送到队列中的消息被一个而且仅仅一个接收者所接收,即使有多个接受者在同一个消息队列中侦听同一个消息
  • 支持异步"即发即弃"的消息传输方式,同时也支持同步请求/应答传送方式。
发布/订阅

在这里插入图片描述
特点

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

两者比较
  P2P是单播,发布订阅模式是多播,如图所示,在P2P中一个消息只能被一个消费者消费,而在发布订阅模式中一个消息可以被多个订阅者接受。并不是说发布订阅一定是多播,只是说发布订阅在一定范围内支持多播这种方式。以Kafka为例,它支持的就是在不同Consumer Group之间的消息的多播,也就是说如果存在多个Consumer Group,每个Group中都会有对应的消息。同时也支持Group内部的消息的单播,也就是说如果一个Group存在多个Consumer,那么这些Consumer只能有一个消费消息。

消息系统使用场景

  在之前也提到过消息中间件技术以及消息系统,既然存在这么多的中间件技术以及消息系统,那么这些技术的使用场景分别都是什么?如何能够更加高效的开发出合适的系统呢?

解耦:各个系统之间通过消息系统进行统一的数据交换,而无需知道彼此的存在与否。
冗余:在之前提到的一些消息系统中,有些消息系统具有消息持久化的能力,可以规避在消息处理之前被丢失的风险。
扩展:消息系统往往提供的是统一的数据接口,各个系统之间可独立的进行系统功能的扩展,只要不修改统一数据接口即可。
流量消峰:消息系统可以顶住峰值流量,业务系统可以根据自己的处理能力从消息系统中获取并且处理对应量级的数据请求。例如淘宝双十一,PV访问增加。限制流量是一种处理方式,但是会造成用户体验的问题,所以使用消息中间件技术可以更好的解决这个问题。
可恢复性:系统中如果出现部分组件失效并不会影响整个系统,它可以在系统恢复之后从消息系统中获取处理的数据。
异步通信:在不需要立即处理的业务场景下使用消息系统,可以讲数据请求放到消息系统中,等到何时的时间在进行处理。

当然一个消息系统的存在或者是一种中间件技术的使用不仅仅可以解决这些问题,这些只是在实际开发中常用到的几种场景。开发者也可以结合内部原理开发出适合自己的消息中间件技术。

常用的消息系统对比

RabbitMQ

 使用Erlong编写,支持多协议AMQP、XMPP、SMTP、STOMP。支持负载均衡、数据持久化。同时支持P2P以及发布订阅模式。

Redis

 基于Key-Value的NoSQL数据库,同时支持MQ的功能,可以做轻量级的队列服务使用,就入队出队操作而言Redis对于短消息(小于10KB)在性能上要比RabbitMQ要好,但是对于长消息的处理要比RabbitMQ性能较差

ZeroMQ

 作为一个轻量级的消息系统,不需要单独的消息服务器或者中间件,应用本身就扮演可这样的角色,其实从原理上说它就是故意而开发库,开发者可以自己组合技术实现消息中间件技术。所以使用的复杂度较高。

ActiveMQ

 基于JMS实现P2P,支持数据持久化、XA事务(分布式事务)等等

Kafka/Jafka

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

MetaQ/RocketMQ

&emps;使用纯Java实现,发布订阅的消息系统,支持本地事务和XA分布式事务。

既然有这么多的消息系统,那么Kafka的被设计出来的设计目标是什么呢

  • 高吞吐量:在廉价的基础上可以支持高性能读写
  • 消息持久化:所有消息都支持持久化到磁盘,没有消息的丢失,支持消息重放机制
  • 完全的分布式系统:Producer、Broker、Consumer都是支持水平拓展
  • 同时满足适应在线处理流和离线批处理
发布了159 篇原创文章 · 获赞 93 · 访问量 13万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 技术工厂 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览