消息队列之kafka(基础介绍)

一、关于JMS

1. JMS 的基础

??JMS是Java提供的一套技术规范。即Java消息服务(Java message service)。应用程序接口。是一个Java平台中关于面向消息中间件的API。用于在两个应用程序之间或者分布式系统中发送消息,进行异步通信。Java消息服务是一个与具体平台无关的API。
??用来异构系统集成通信,缓解系统瓶颈。 提高系统的伸缩性、增强系统用户体验。使得系统模块化和组件化变得可行并更加灵活。
JAVA2EE十三大规范:https://blog.csdn.net/qq_41637061/article/details/84640947

2. JMS消息传输模型

(1)点对点

??点对点模型通常是一个基于拉取或者轮询的消息传送模型,这种模型从队列中请求信息,而不是将消息推送到客户端。这个模型的特点是发送到队列的消息被一个且只有接受者接受处理,即使有多个消息监听者也是如此。总的来说就是:一对一,消费者主动拉取数据,消息收到后消息清除




(2) 发布/订阅模式

??发布订阅模型则是一个基于推送的消息传送模型。发布订阅模型可以有多种不同的订阅者,临时订阅者只在主动监听主题时才接收消息,而持久订阅者则监听主题的所有消息,即时当 前订阅者不可用,处于离线状态。

3.JMS 核心组件


Destination:消息发送的目的地,也就是前面说的Queue 和 Topic。
Message:从字面上就可以看出来是被发送的消息。
Producer:消息的生产者,发送一个消息,必须通过这个产生者来发送。
MessageConsumer:与生产者相对应,这是消息的消费者或接收者,通过它来接收一个消息。
? 其中 message有分为很多种类:
??StreamMessage:Java 数据流消息,用标准流操作来顺序的填充和读取。
??MapMessage:一个 Map 类型的消息;名称为 string 类型,而值为 Java 的基本类型。
??TextMessage:普通字符串消息,包含一个 String。
??ObjectMessage:二进制数组消息,包含一个 byte[]。
??XMLMessage:一个 XML 类型的消息。
? 其中最常用的就是TextMessage 和 ObjectMessage。

4.常见的消息队列服务

(1) ActiveMQ

? ActiveMQ 是 Apache 出品,最流行的,能力强劲的开源消息总线。ActiveMQ 是一个完全支 持 JMS1.1 和 J2EE 1.4 规范的。
? 特点:
??? ? - 生产者、服务器和消费者都可分布
??? ? - 消息存储顺序写
??? ? - 性能极高,吞吐量大
??? ? - 支持消息顺序
??? ? - 客户端 pull,随机读,利用 sendfile 系统调用,zero-copy ,批量拉数据
??? ? - 支持消费端事务
??? ? - 支持消息广播模式
??? ? - 支持异步发送消息
??? ? - 支持 http 协议
??? ? - 数据迁移、扩容对用户透明
??? ? - 支持同步和异步复制两种 HA

(2) RocketMQ

?RocketMQ 是一款分布式、队列模型的消息中间件
? 特点:
??? ? - 能够保证严格的消息顺序
??? ? - 提供丰富的消息拉取模式
??? ? - 高效的订阅者水平扩展能力
??? ? - 实时的消息订阅机制
??? ? - 亿级消息堆积能力

二、kafka的基础介绍

1. Kafka 的介绍

?? kafak是一种分布式的,基于发布/订阅的消息系统。以时间复杂度为O(1)的方式提供消息持久化能力,即使对TB级以上数据也能保证常数时间复杂度的访问性能。 高吞吐率。即使在非常廉价的商用机器上也能做到单机支持每秒100K条以上消息的传输。支持Kafka Server间的消息分区,及分布式消费,同时保证每个Partition内的消息顺序传输。同时支持离线数据处理(hive、HBASE)和实时数据处理(spark、storm)。

2.kafka的优势

?? - 解耦:允许独立的扩展或者修改两边的处理过程,只要确保他们遵循同样的接口约束。
?? - 冗余:消息队列把数 据进行持久化直到它们已经被完全处理,通过这一方式规避了数据丢失风险。直到保存到使用完毕。
?? - 扩展性:增大消息入队和处理的频率是很容易
?? - 灵活性&峰值处理能力:消息队列能够 使关键组件顶住突发的访问压力,而不会因为突发的超负荷的请求而完全崩溃。
?? - 可恢复性:系统的一部分组件失效时,不会影响到整个系统。
?? - 顺序保证:Kafka 保证一个 Partition 内的消息的有序性。
?? - 缓冲:消息队列通过一个缓冲层来帮助任务最高效率的执行。写入队列的处理 会尽可能的快速。该缓冲有助于控制和优化数据流经过系统的速度。
?? - 异步通信:消息队列提供了异步处理机制,允许用户把一个消息放入队列,但并不立即处理它。(想放多少放多少,需要的时候在处理)

3.kafka的特性

?? - 高吞吐、低延迟:kafka 每秒可以处理几十万条消息,它的延迟最低只有几毫秒。
?? - 可扩展性:kafka 集群支持热扩展
?? - 可靠性:消息被持久化到本地磁盘,并且支持数据备份防止数据丢失
?? - 容错性:允许集群中节点失败
?? - 高并发:支持数千个客户端同时读写

4.kafka的应用场景

?? 经典架构:Flume + Kafka + Storm /spark streaming+ Redis。
?? 应用场景:消息系统、跟踪网站活动、运营指标、日志聚合、流处理、采集日志、提交日志。

原文地址:http://blog.51cto.com/14048416/2336648

时间: 2024-08-15 00:08:06

消息队列之kafka(基础介绍)的相关文章

高性能消息队列 CKafka 核心原理介绍(上)

欢迎大家前往腾讯云技术社区,获取更多腾讯海量技术实践干货哦~ 作者:闫燕飞 1.背景 Ckafka是基础架构部开发的高性能.高可用消息中间件,其主要用于消息传输.网站活动追踪.运营监控.日志聚合.流式处理.事件追踪.提交日志等等需要高性能的场景,目前已经上线腾讯云.Ckafka完全兼容现有的Kafka协议,使现有Kafka用户可以零成本迁入Ckafka.Ckafka基于现有的Kafka进行了扩展开发和优化,为了方便用户理解Ckafka本文也将对Kafka的实现原理进行较为详细的介绍. 2.Kaf

消息队列常用应用场景介绍

消息队列作为分布式系统中重要的组件,可以解决应用耦合,异步消息,流量削锋等系列问题 实现高性能,高可用,可伸缩和最终一致性架构 使用较多的消息队列有ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaMQ,RocketMQ 消息队列应用场景 以下介绍消息队列在实际应用中常用的使用场景. 1 异步处理 场景说明:用户注册后,需要发注册邮件和注册短信.传统的做法有两种 1.串行的方式:2.并行方式 (1)串行方式:将注册信息写入数据库成功后,发送注册邮件,再发送注册短信.以上三个任

【c#】队列(Queue)和MSMQ(消息队列)的基础使用

原文:[c#]队列(Queue)和MSMQ(消息队列)的基础使用 首先我们知道队列是先进先出的机制,所以在处理并发是个不错的选择.然后就写两个队列的简单应用. Queue 命名空间 命名空间:System.Collections,不在这里做过多的理论解释,这个东西非常的好理解. 可以看下官方文档:https://docs.microsoft.com/zh-cn/dotnet/api/system.collections.queue?view=netframework-4.7.2 示例代码 我这里

消息队列服务Kafka揭秘:痛点、优势以及适用场景

摘要: 消息队列Kafka是一个分布式的.高吞吐量.高可扩展性消息队列服务,广泛用于日志收集.监控数据聚合.流式数据处理.在线和离线分析等,是大数据生态中不可或缺的产品之一,阿里云提供全托管服务,用户无需部署运维,更专业.更可靠.更安全.本文就将带你走进消息队列Kafka. 摘要:消息队列Kafka是一个分布式的.高吞吐量.高可扩展性消息队列服务,广泛用于日志收集.监控数据聚合.流式数据处理.在线和离线分析等,是大数据生态中不可或缺的产品之一,阿里云提供全托管服务,用户无需部署运维,更专业.更可

C#消息队列(MQ)零基础从入门到实战演练

一.课程介绍 如果您从工作中之听过但未有接触过消息对队列(MQ),如果你接触过一点关于MQ的知识,如果没有这么的多如果的话......,那么阿笨将通过本次<C#消息队列零基础从入门到实战演练>分享课让您对消息队列有一个实质性的了解和认识,达到实际的灵活贯通和运用.本次分享课您将学习到以下知识点: 1.微软MSMQ的基本使用技能以及MSMQ在WCF技术中的运用. 2.企业级RabbitMQ消息队列的两种消费模式(生产消费和发布订阅)的介绍和使用. 3.如何实现RabbitMQ客户端(Client

kafka 基础介绍

kafka 基础 kafka有四个核心API: 应用程序使用 Producer API 发布消息到1个或多个topic(主题). 应用程序使用 Consumer API 来订阅一个或多个topic,并处理产生的消息. 应用程序使用 Streams API 充当一个流处理器,从1个或多个topic消费输入流,并生产一个输出流到1个或多个输出topic,有效地将输入流转换到输出流. Connector API允许构建或运行可重复使用的生产者或消费者,将topic连接到现有的应用程序或数据系统.例如,

消息服务百科全书——Kafka基本原理介绍

架构 1.1 总体架构 因为Kafka内在就是分布式的,一个Kafka集群通常包括多个代理. 为了均衡负载,将话题分成多个分区,每个代理存储一或多个分区.多个生产者和消费者能够同时生产和获取消息. 一个典型的Kafka请添加链接描述集群中包含若干Producer(可以是web前端产生的Page View,或者是服务器日志,系统CPU.Memory等),若干broker(Kafka支持水平扩展,一般broker数量越多,集群吞吐率越高),若干Consumer Group,以及一个Zookeeper

消息队列MQ技术的介绍和原理

消息队列技术是分布式应用间交换信息的一种技术.消息队列可驻留在内存或磁盘上,队列存储消息直到它们被应用程序读走.通过消息队列,应用程序可独立地执行--它们不需要知道彼此的位置.或在继续执行前不需要等待接收程序接收此消息.   消息中间件概述 消息队列技术是分布式应用间交换信息的一种技术.消息队列可驻留在内存或磁盘上,队列存储消息直到它们被应用程序读走.通过消息队列,应用程序可独立地执行--它们不需要知道彼此的位置.或在继续执行前不需要等待接收程序接收此消息. 在分布式计算环境中,为了集成分布式应

Redis消息队列和KafKa优劣对比

Redis作为消息队列升级为KafKa记录项目当中运营人员发送指定匹配用户(最高用户量几十万的级别)特定的消息,所以这块是确确实实需要使用专业级别的消息队列中间件的,但是可能由于当时开发的各种历史原因导致使用了Redis的队列结构来作为消息队里lpush,blpop等命令,项目开发进展到现在,用户量不断增大,包括不同的消息继承进来,包括举报反馈,小纸条(用户间消息发送),活动奖励通知,等等一些不同的消息进来以后,Redis可能会变得不那么可靠. Redis作为消息队列Redis的pub-sub模