topic

kafka汇总

一个人想着一个人 提交于 2019-12-01 07:09:25
Kafka 1. kafka概念 kafka是一个高吞吐亮的、分布式、基于发布/订阅(也就是一对多)的消息系统,最初由Linkedln公司开发的,使用Scala语言编写的,目前是Apache的开源项目。 消息队列: 1> 原理 客户端消费Queue的数据优良种方式: 发布/订阅模式:也就是一对多,数据产生后,推给所有的订阅者。 点点对点模式:也就是一对一,这个是主动模式,第一种模式更像是被动模式,这个就是消费者主动拉取生产后的数据。 2> 消息队列的优点: 解耦2.冗余3.扩展性4.灵活性和峰值处理能力5.可恢复性6.顺序保证(kafka保证一个partition内的数据是有序的)7.缓冲8.异步通信 kafka的基本术语 topic:消息类别,kafka按照topic来分类消息。可以理解成一个队列,一个topic里有多个partition。 broker:kafka服务器,负责消息的存储与转发。一台kafka服务器就是一个broker,一个集群有多个broker,一个broker可以有多个topic。 partition:topic的一个分区,一个topic可以包含多个partition,topic消息保存在各个partition上。 offset:消息在日志中的位置,可以理解是消息在partition上的偏移量,也是代表消息的唯一序号。 producer:消息生产者

Kafka

半腔热情 提交于 2019-12-01 05:06:05
Kafka 入门 什么是 Kafka kafka最初是 LinkedIn 的一个内部基础设施系统。最初开发的起因是, LinkedIn虽然有了数据库和其他系统可以用来存储数据,但是缺乏一个可以帮助处理持续数据流的组件。所以在设计理念上,开发者不想只是开发一个能够存储数据的系统,如关系数据库、Nosql 数据库、搜索引擎等等,更希望把数据看成一个持续变化和不断增长的流,并基于这样的想法构建出一个数据系统,一个数据架构。 Kafka外在表现很像消息系统,允许发布和订阅消息流,但是它和传统的消息系统有很大的差异, 首先,Kafka 是个现代分布式系统,以集群的方式运行,可以自由伸缩。 其次,Kafka 可以按照要求存储数据,保存多久都可以, 第三,流式处理将数据处理的层次提示到了新高度,消息系统只会传递数据,Kafka 的流式处理能力可以让我们用很少的代码就能动态地处理派生流和数据集。所以 Kafka 不仅仅是个消息中间件。 Kafka不仅仅是一个消息中间件,同时它是一个流平台,这个平台上可以发布和订阅数据流(Kafka 的流,有一个单独的包 Stream 的处理),并把他们保存起来,进行处理,这个是 Kafka作者的设计理念。 大数据领域,Kafka 还可以看成实时版的 Hadoop,但是还是有些区别,Hadoop 可以存储和定期处理大量的数据文件,往往以 TB 计数,而

ID07 kafka & ActiveMQ

て烟熏妆下的殇ゞ 提交于 2019-12-01 04:18:26
Kafka是分布式发布-订阅消息系统。它最初由LinkedIn公司开发,之后成为Apache项目的一部分。Kafka是一个分布式的,可划分的,冗余备份的持久性的日志服务。它主要用于处理活跃的流式数据。 Kafka主要特点: 同时为发布和订阅提供高吞吐量。据了解,Kafka每秒可以生产约25万消息(50 MB),每秒处理55万消息(110 MB)。 可进行持久化操作。将消息持久化到磁盘,因此可用于批量消费,例如ETL,以及实时应用程序。通过将数据持久化到硬盘以及replication防止数据丢失。 分布式系统,易于向外扩展。所有的producer、broker和consumer都会有多个,均为分布式的。无需停机即可扩展机器。 消息被处理的状态是在consumer端维护,而不是由server端维护。当失败时能自动平衡。 支持online和offline的场景。 Kafka的架构: Kafka的整体架构非常简单,是显式分布式架构,producer、broker(kafka)和consumer都可以有多个。Producer,consumer实现Kafka注册的接口,数据从producer发送到broker,broker承担一个中间缓存和分发的作用。broker分发注册到系统中的consumer。broker的作用类似于缓存,即活跃的数据和离线处理系统之间的缓存。客户端和服务器端的通信

消息中间件常见问题

人走茶凉 提交于 2019-12-01 02:55:11
高可用,重复消费,幂等,可靠性传输,消息丢失 1、 kafka,rabbitMQ,activemq,rocketMQ使用场景及区别技术选型 吞吐量、topic数量对吞吐量的影响、时效性、可用性、可靠性、核心特点、优劣势总结 activemq:吞吐量万级 非常成熟,功能比较强大,大量的公司再项目中有应用 偶尔会有低概消息丢失,近些年应用越来越少 官方社区维护越来越少,而且确实主要基于解耦和异步来用的,较少在大规模吞吐的场景下使用 rabbitMQ: 吞吐量万级 跟服务器有关系 基于erlang开发,性能较好 延时低,而且提供开源的管理界面 社区比较活跃,近些年互联网公司用rabbitmq的比较多,因为基于erlang语言 不懂源码,比较难进行定制和掌控; rocketMQ:单机吞吐量10w,topic可以达到几百或者上千级别 topic越多吞吐量会有较小幅度的下降,阿里大规模使用,比较可靠、日处理消息上百亿、拓展方便、社区维护可以,只会复杂MQ业务场景 kafka:功能简单,主要支持简单的mq功能,ms级延迟 极高的可用性和可靠性不过有消息重复消费 在大数据领域的实时计算以及日志采集被大规模使用。 中小型公司:rabbitMQ,技术实力一般 挑战不是很高 社区比较活跃; 大型公司:rocketMQ 基础架构研发实力较强 如果是大数据领域的实时计算、日志采集等场景

RocketMQ 源码学习笔记————Producer 是怎么将消息发送至 Broker 的?

天涯浪子 提交于 2019-12-01 02:31:40
目录 RocketMQ 源码学习笔记————Producer 是怎么将消息发送至 Broker 的? 前言 项目结构 rocketmq-client 模块 DefaultMQProducerTest RocketMQ 源码学习笔记————Producer 是怎么将消息发送至 Broker 的? 前言 本次分析基于 RocketMQ release-4.5.2 版本。 分析的目标是: RocketMQ 中 Producer 是怎么将消息发送至 Broker 的? 说到学习源码,首先当然是要把源代码下载下来, 官方地址 。使用 git clone https://github.com/apache/rocketmq.git 将源代码 clone 至本地。 项目结构 用 IDEA 打开该项目 rocketmq-client 模块 可以看到有很多子模块,这次学习的是 Producer 故打开 rocketmq-client 模块,可以在单元测试用找到测试 Producer 功能的类。 DefaultMQProducerTest 打开该类,观察其方法 可以看出以 test 开头的方法都是单元测试方法,可以直接运行。 init 方法和 terminate 分别是单元测试的初始化方法和销毁方法。 init 和 terminate // 创建一个默认的客户端实例 @Spy private

springboot+redisTemplate实现消息队列(pub/sub,list,监听键过期)

落爺英雄遲暮 提交于 2019-12-01 01:33:39
redis实现方式主流的有两种,一种是lpush rpop,一种是pub/sub机制,下面来做个演示的例子 大概的分为两个角色,生产者和消费者,然后大概结构是这样的: 主要的角色就是维护主题和消费者关系的一个表,生产者、消费者、监听键过期机制,还有定时任务,这次写出来的例子只是支持滞后消费的重投,超前消费的情况没有得到很好解决。 首先是生产者,生产者主要是根据主题发布消息 package com.gdut.redisdemo.producer; import com.gdut.redisdemo.VO.MessageVO; import com.gdut.redisdemo.config.PubSubTable; import com.google.gson.Gson; import io.netty.util.CharsetUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.stereotype.Component; /** * @author lulu * @Date 2019/6/22 16:47 */

Kafka

情到浓时终转凉″ 提交于 2019-11-30 23:29:37
尚硅谷大数据技术之Kafka (作者:尚硅谷大数据研发部) 版本:V2.0 第1章 Kafka概述 1.1 消息队列 (1)点对点模式(一对一,消费者主动拉取数据,消息收到后消息清除) 点对点模型通常是一个基于拉取或者轮询的消息传送模型,这种模型从队列中请求信息,而不是将消息推送到客户端。这个模型的特点是发送到队列的消息被一个且只有一个接收者接收处理,即使有多个消息监听者也是如此。 (2)发布/订阅模式(一对多,数据生产后,推送给所有订阅者) 发布订阅模型则是一个基于推送的消息传送模型。发布订阅模型可以有多种不同的订阅者,临时订阅者只在主动监听主题时才接收消息,而持久订阅者则监听主题的所有消息,即使当前订阅者不可用,处于离线状态。 1.2 为什么需要消息队列 1)解耦:   允许你独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束。 2)冗余: 消息队列把数据进行持久化直到它们已经被完全处理,通过这一方式规避了数据丢失风险。许多消息队列所采用的"插入-获取-删除"范式中,在把一个消息从队列中删除之前,需要你的处理系统明确的指出该消息已经被处理完毕,从而确保你的数据被安全的保存直到你使用完毕。 3)扩展性: 因为消息队列解耦了你的处理过程,所以增大消息入队和处理的频率是很容易的,只要另外增加处理过程即可。 4)灵活性 & 峰值处理能力: 在访问量剧增的情况下

RabbitMQ3-RabbitMQ消息类型

南笙酒味 提交于 2019-11-30 22:19:44
1.1 概述 http://www.rabbitmq.com/getstarted.html 1.2 simplest(简单队列) 1.2.1.概述 The simplest thing that does something - 简单队列 生产消费一一对应,耦合性高. - 生产消息快,消费消息慢.如果很多容易堵塞 P:消息生产者;红色的:队列;C:消费者. 1.2.2 示例 pom.xml < dependencies > < dependency > < groupId > com.rabbitmq </ groupId > < artifactId > amqp-client </ artifactId > < version > 4.0.2 </ version > </ dependency > < dependency > < groupId > org.slf4j </ groupId > < artifactId > slf4j-api </ artifactId > < version > 1.7.10 </ version > </ dependency > < dependency > < groupId > org.slf4j </ groupId > < artifactId > slf4j-log4j12 </ artifactId > <

SpringBoot 中使用RabbitMQ(一)

不羁的心 提交于 2019-11-30 21:56:31
Exchange 交换机:Exchange 用于转发消息,但是它不会做存储 ,如果没有 Queue bind 到 Exchange 的话,它会直接丢弃掉 Producer 发送过来的消息。 这里有一个比较重要的概念:路由键 。消息到交换机的时候,交互机会转发到对应的队列中,那么究竟转发到哪个队列,就要根据该路由键。 交换机的功能主要是接收消息并且转发到绑定的队列,交换机不存储消息,在启用ack模式后,交换机找不到队列会返回错误。 交换机有四种类型:Direct, topic, Headers and Fanout * Direct:direct 类型的行为是”先匹配, 再投送”. 即在绑定时设定一个 routing_key, 消息的routing_key 匹配时, 才会被交换器投送到绑定的队列中去. * Topic:按规则转发消息(最灵活) * Headers:设置 header attribute 参数类型的交换机 * Fanout:转发消息到所有绑定队列(广播模式) 复制代码 下面介绍常用的三种模式的基础用法。 SpringBoot 整合 Pom 依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> <

springboot集成rabbitmq实战

拈花ヽ惹草 提交于 2019-11-30 21:54:28
RabbitMQ介绍 RabbitMQ是实现AMQP(高级消息队列协议)的消息中间件的一种,最初起源于金融系统,用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。RabbitMQ主要是为了实现系统之间的双向解耦而实现的。当生产者大量产生数据时,消费者无法快速消费,那么需要一个中间层。保存这个数据。 AMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,反之亦然。AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全 通常我们谈到队列服务, 会有三个概念: 发消息者、队列、收消息者,RabbitMQ 在这个基本概念之上, 多做了一层抽象, 在发消息者和 队列之间, 加入了交换器 (Exchange). 这样发消息者和队列就没有直接联系, 转而变成发消息者把消息给交换器, 交换器根据调度策略再把消息再给队列 虚拟主机:一个虚拟主机持有一组交换机、队列和绑定。为什么需要多个虚拟主机呢?很简单,RabbitMQ当中,用户只能在虚拟主机的粒度进行权限控制。 因此,如果需要禁止A组访问B组的交换机/队列/绑定,必须为A和B分别创建一个虚拟主机