消息队列的作用以及kafka和activemq的对比

背景分析

消息队列这个类型的组件一直是非常重要的组件,当经过两家企业后我就很坚信这个结论了。队列这种东西,最广泛的作用还是在于解耦,宽泛一点的说,它可以将不同部门的工作内容进行有效的整合,基于一个约定好的格式,就可以两头互相不干扰的进行开发。可以说这个生产消费的思想不仅仅适用于程序也适用于非常多的地方。
目前对于我看到的来说,kafka更多的还是做为一个数据源,数据桥梁的作用,不同业务之间的沟通。比如需要实时接入A部门的业务数据的话,就会有这样的手段:

落地到HDFS的数据会用来进行一些算法上的离线处理,而kafka端则是给需要实时性的消费方。其实数据的消费方式无非也就实时和离线两种方式。

Kafka和activemq对比

相比过去经常使用的activemq,kafka确实非常的不同,做一个对比来深化印象

对比 Activemq Kafka
接口协议 遵守JMS规范,各语言支持较好 没有遵循标准MQ接口协议,使用较为复杂
吞吐量 较低,磁盘随机读写 较高,磁盘顺序读写
游标位置 AMQ来管理,无法读取历史数据 客户端自己管理,不乐意甚至重新读一遍也行
HA机制 主从复制,竞争锁的方式来选举新的主节点 和hadoop系列产品一样,由zk管理所有节点

说到底,主要还是做为kafka的消费方,能感受到最大的不同还是在于几个:

  1. 吞吐量确实非常高
    2.可以重读历史数据
    但是也有一些缺点:
    1.概念上比较复杂,相对于AMQ只需要知道ip和队列名你就能获得数据,Kafka使用起来非常繁琐

Kafka的基本概念(摘录)

1.Broker:消息中间件处理结点,一个Kafka节点就是一个broker,多个broker可以组成一个Kafka集群。
2.Topic:一类消息,例如page view日志、click日志等都可以以topic的形式存在,Kafka集群能够同时负责多个topic的分发。
3.Partition:topic物理上的分组,一个topic可以分为多个partition,每个partition是一个有序的队列。
4.Segment:partition物理上由多个segment组成。
5.offset:每个partition都由一系列有序的、不可变的消息组成,这些消息被连续的追加到partition中。partition中的每个消息都有一个连续的序列号叫做offset,用于partition唯一标识一条消息.

Kafka消费端的常用参数

        Properties props = new Properties();
                //zk服务器的地址  xxxx:2181
        props.put("zookeeper.connect", zookeeper);
                //组的名称,区别于其他group否则会接收不到数据
        props.put("group.id", groupId);
        props.put("zookeeper.session.timeout.ms", "8000");
        props.put("zookeeper.connection.timeout.ms", "20000");
        props.put("zookeeper.sync.time.ms", "2000");
        props.put("auto.commit.interval.ms", "5000");
        props.put("rebalance.max.retries", "5");
        props.put("rebalance.backoff.ms", "60000");
        props.put("auto.commit.enable", "true");
                //重点参数,是否每次都从offset最前面开始读起
        props.put("auto.offset.reset", "smallest");

Kafka的一些常用命令

查看所有的topic

bin/kafka-topics.sh --zookeeper zk1.test-inf-zk.data.m.com:2181/octopus,zk2.test-inf-zk.data.m.com:2181/octopus,zk3.test-inf-zk.data.m.com:2181/octopus --list

查看topic的偏移量

bin/kafka-run-class.sh kafka.tools.GetOffsetShell --topic xiuxiu_sync_search_big_data --time -1 --broker-list 192.168.199.11:9092 --partitions 0

查看topic的状态

bin/kafka-topics.sh --zookeeper 192.168.199.11:2181 --topic xiuxiu_sync_search_big_data --descr

原文地址:https://www.cnblogs.com/yuhan-Hanny/p/11657755.html

时间: 2024-11-07 14:38:00

消息队列的作用以及kafka和activemq的对比的相关文章

消息队列中间件(二)使用 ActiveMQ

ActiveMQ 介绍 Active MQ 是由 Apache 出品的一款流行的功能强大的开源消息中间件,它速度快,支持跨语言的客户端,具有易于使用的企业集成模式和许多的高级功能,同时完全支持 JSM1.1 和 J2EE1.4 . 官方下载地址: http://activemq.apache.org/download.html 官方安装教程: http://activemq.apache.org/getting-started.html 默认管理页面:http://127.0.0.1:8161/

消息队列技术终结者(三)—ActiveMQ的特性及优势

1.实现JMS1.1规范,支持J2EE1.4以上.2.可以在任何JVM运行.3.支持多种语言客户端(java, C, C++, Ajax, ActionScript等等).4.支持多种协议(stomp, openwire, REST).5.良好的Spring支持.6.速度很快,比JBossMQ快十倍.7.与OpenJMS.JBossMQ等开源JMS Provider相比,ActiveMQ有Apache的支持,持续发展的优势明显 .

RabbitMQ,Apache的ActiveMQ,阿里RocketMQ,Kafka,ZeroMQ,MetaMQ,Redis也可实现消息队列,RabbitMQ的应用场景以及基本原理介绍,RabbitMQ基础知识详解,RabbitMQ布曙

消息队列及常见消息队列介绍 2017-10-10 09:35操作系统/客户端/人脸识别 一.消息队列(MQ)概述 消息队列(Message Queue),是分布式系统中重要的组件,其通用的使用场景可以简单地描述为: 当不需要立即获得结果,但是并发量又需要进行控制的时候,差不多就是需要使用消息队列的时候. 消息队列主要解决了应用耦合.异步处理.流量削锋等问题. 当前使用较多的消息队列有RabbitMQ.RocketMQ.ActiveMQ.Kafka.ZeroMQ.MetaMq等,而部分数据库如Re

第十一章 企业项目开发--消息队列activemq

注意:本章代码基于 第十章 企业项目开发--分布式缓存Redis(2) 代码的github地址:https://github.com/zhaojigang/ssmm0 消息队列是分布式系统中实现RPC的一种手段. 1.消息队列的基本使用流程 假设: 我们有这样一个需求,当每注册一个admin的之后,就写一条日志log数据到数据库. 分析: 在实际中,我们是不会把日志直接写入数据库的,因为日志数据通常是庞大的,而且日志的产生是频繁的,如果我们使用数据库存储日志,哪怕是使用异步存储,也是极耗性能的.

分布式消息队列 NSQ 和 Kafka 对比

谈谈分布式消息队列的一些特性,比较两种比较常用的消息队列——NSQ和Kafka 1 消息队列的作用 解耦,将一个流程加入一层数据接口拆分成两个部分,上游专注通知,下游专注处理 缓冲,应对流量的突然上涨变更,消息队列有很好的缓冲削峰作用 异步,上游发送消息以后可以马上返回,处理工作交给下游进行 广播,让一个消息被多个下游进行处理 冗余,保存处理的消息,防止消息处理失败导致的数据丢失 2 NSQ 2.1 组件 NSQ主要包含3个组件: nsqd:在服务端运行的守护进程,负责接收,排队,投递消息给客户

消息队列 Kafka 的基本知识及 .NET Core 客户端

前言 最新项目中要用到消息队列来做消息的传输,之所以选着 Kafka 是因为要配合其他 java 项目中,所以就对 Kafka 了解了一下,也算是做个笔记吧. 本篇不谈论 Kafka 和其他的一些消息队列的区别,包括性能及其使用方式. 简介 Kafka 是一个实现了分布式的.具有分区.以及复制的日志的一个服务.它通过一套独特的设计提供了消息系统中间件的功能.它是一种发布订阅功能的消息系统. 一些名词 如果要使用 Kafka ,那么在 Kafka 中有一些名词需要知道,文本不讨论这些名词是否在其他

JMS消息队列ActiveMQ(点对点模式)

生产者(producer)->消息队列(message queue) package com.java1234.activemq; import javax.jms.Connection; import javax.jms.ConnectionFactory; import javax.jms.Destination; import javax.jms.JMSException; import javax.jms.MessageProducer; import javax.jms.Session

架构师基本功:消息队列

消息队列是啥?我觉得大家都心知肚明,已经众所周知到不用解释的程度.不过,但凡学习.解释一样东西,都应该遵循 "它是什么?". "做什么用?". "为啥要用它". "它有啥分类" 这个套路,所以首先还是要给个定义. 世间无定义,老子只好自己给个定义:消息队列嘛,首先是个队列,先进先出:然后,它传递消息... 一.消息队列的作用 有高手总结为: 1.异步处理 将不是必须的业务逻辑进行异步处理,换言之,就是可以立即返回. 比如说,注

面试官对于消息队列的连环炮

1. 引子 消息队列分布式系统中重要的组件,一种存放消息的容器,主要作用有解耦.异步.削锋,是大型分布式系统不可缺少的中间件. 常见的消息队列有 ActiveMQ,RabbitMQ,RocketMQ,Kafka. 简历中涉及到了消息队列,面试官先问了这样几个问题: 你们系统里为什么要使用消息队列? 既然使用了消息队列,说说他还有什么使用场景? 消息队列的优缺点是什么? 2. 为什么使用消息队列? 我的回答:甲方提供 EOS 充值服务,我方进行调用.出于解耦的目的,引入了消息队列. 一个类似应试的