topic

再谈消息队列技术

怎甘沉沦 提交于 2019-12-21 04:25:17
上周,我们举办了第二届技术沙龙,我这边主要演讲了消息队列技术的议题,现分享给大家: 在我们团队内部,随着消息应用中心(任务中心)的广泛应用,有时候我们感觉不到消息队列的存在,但这不影响消息队列在高可用、分布式、高并发架构下的核心地位。 消息队列都应用到了哪些实际的应用场景中? 一、再谈消息队列的应用场景 异步处理:例如短信通知、终端状态推送、App推送、用户注册等 数据同步:业务数据推送同步 重试补偿:记账失败重试 系统解耦:通讯上下行、终端异常监控、分布式事件中心 流量消峰:秒杀场景下的下单处理 发布订阅:HSF的服务状态变化通知、分布式事件中心 高并发缓冲:日志服务、监控上报 但是,我们对消息队列的底层技术和原理还是不了解,那么我们马上开始吧… 二、消息队列的一些基本概念和简单原理 1. Broker Broker的概念来自与Apache ActiveMQ,通俗的讲就是MQ的服务器。 2. 消息的生产者、消费者 消息生产者Producer:发送消息到消息队列。 消息消费者Consumer:从消息队列接收消息。 3. 点对点消息队列模型 消息生产者向一个特定的队列发送消息,消息消费者从该队列中接收消息; 消息的生产者和消费者可以不同时处于运行状态。 每一个成功处理的消息都由消息消费者签收确认(Acknowledge)。如图: 4. 发布订阅消息模型 -Topic

filebeat+kafka搭建

被刻印的时光 ゝ 提交于 2019-12-21 01:19:15
简单介绍: 因为Kafka集群是把状态信息保存在Zookeeper中的,并且Kafka的动态扩容是通过Zookeeper来实现的,所以需要优先搭建Zookeerper集群,建立分布式状态管理。开始准备环境,搭建集群: zookeeper是基于Java环境开发的所以需要先安装Java 然后这里使用的zookeeper安装包版本为zookeeper-3.4.14,Kafka的安装包版本为kafka_2.11-2.2.0。 AMQP协议:Advanced Message Queuing Protocol (高级消息队列协议)是一个标准开放的应用层的消息中间件协议。AMQP定义了通过网络发送的字节流的数据格式。因此兼容性非常好,任何实现AMQP协议的程序都可以和与AMQP协议兼容的其他程序交互,可以很容易做到跨语言,跨平台。 一、首先做好kafka 1、准备三台服务器,推荐每台2个G,记得关闭防火墙 server1:10.0.0.41 server2:10.0.0.42 server3:10.0.0.43 2、三台都得配置jdk环境,1.8以上,修改主机名并且配置主机名 10.0.0.41 hostname kafka01 10.0.0.42 hostname kafka02 10.0.0.43 hostname kafka03 cat /etc/hosts 10.0.0.41

kafka环境搭建和使用(python API)

自闭症网瘾萝莉.ら 提交于 2019-12-20 17:25:33
引言 上一篇文章了解了kafka的重要组件zookeeper,用来保存broker、consumer等相关信息,做到平滑扩展。这篇文章就实际操作部署下kafka,用几个简单的例子加深对kafka的理解,学会基本使用kafka。 环境搭建 我将会在本地部署一个三台机器的zookeeper集群,和一个2台机器的kafka集群。 zookeeper集群 zookeeper的搭建可以看我的上一篇文章 分布式系统中zookeeper实现配置管理+集群管理 ,按照步骤,一步步可以很容易的搭建3太服务器的zookeeper集群。跟之前一样,我还是在本地的3个端口搭建了3台服务器,地址如下所示: 192.168.0.105:2181 192.168.0.105:2182 192.168.0.105:2183 这三台服务器一会儿会在kafka配置中用到。 kafka集群 第一步. 下载kafka 到kafka官网下载 apache kafka ,解压到 /path/to/kafka 目录。 第二步. 修改配置文件 复制 /path/to/kafka/config/server.properties ,到 /path/to/kafka/config/server-1.properties 和 /path/to/kafka/config/server-2.properties

舔一舔 · 肌霸Kafka

橙三吉。 提交于 2019-12-20 11:56:26
目录 1、关于Kafka你知道这些术语么? 2、Kafka如何存储数据? 3、kafka扑街了,如何保证高可用? 4、Kafka如何做到数据不丢失? 又是烟雨蒙蒙的冬日,一杯暖茶,春天的气息已经在杯中袅袅升起的热气里荡漾开来,茶醇使人醉,技术要学会。我们来简单剖析一下kafka的一些原理特性。 1、关于Kafka,你知道这些术语吗? Kafka在消息处理领域能独步天下,自然离不开他优良的架构设计,我们先来看看在Kafka的领域里有哪些组件和概念,下面是一些枯燥的名词解释,如果已经掌握,可以帮忙看看是否正确解释了。 Topic ,顾名思义,主题的意思。可以理解为是对某一类型的消息的标识,kafka处理的消息集按照Topic分类,相当于逻辑上的一个消息消息集合。 Partition ,分区,数据分区,数据分片,这是物理存储上的分组,每一个Topic可能对应多个分片,比如Topic为Order的消息需要存放5TB的数据到磁盘,如果分配5个Partition,每个partition就是1TB的数据。 一直在说kafka是分布式,高可靠的消息系统,那么这里就有所体现,多个Partition可以分散在不同的服务器上,将数据存储到不同服务器的磁盘上。 Broker ,Kafka是可以分布式部署集群,集群中多台服务器,每台部署一个Kafka进程,这个Kafka进程就称之为Broker。

Linux下librdkafka客户端的编译运行

前提是你 提交于 2019-12-20 10:45:15
Linux下librdkafka 客户端的编译运行    librdkafka是一个开源的 Kafka客户端 C/C++实现,提供了Kafka生产者、消费者接口。   由于项目需要,我要将Kafka生产者接口封装起来给别人调用,所以先安装了librdkakfa,然后在demo上进行修改封装一个生产者接口。 [一] 安装librdkafka    首先在github上下载 librdkafka 源码,解压后进行编译;    cd librdkafka-master    chmod 777 configure lds-gen.py    ./configure    make    make install    在make的时候,如果是64位Linux会报下面这个异常    /bin/ld:librdkafka.lds:1: syntax error in VERSION script    只要 Makefile.config里面的 WITH_LDS=y这一行注释掉就不会报错了。 [二] 封装librdkafka的生产者接口 #include <ctype.h> #include <signal.h> #include <string.h> #include <unistd.h> #include <stdlib.h> #include <syslog.h> #include

Kafka概述与设计原理

孤者浪人 提交于 2019-12-20 00:48:15
kafka是一种高吞吐量的分布式发布订阅消息系统,有如下特性: 1. 通过O(1)的磁盘数据结构提供消息的持久化,这种结构对于即使数以TB的消息存储也能够保持长时间的稳定性能。 2 .高吞吐量:即使是非常普通的硬件kafka也可以支持每秒数十万的消息。 3 .支持通过kafka服务器和消费机集群来分区消息。 4 .支持Hadoop并行数据加载。 本篇属于大数据技术-> kafka 系列的开篇,本文从以下几个基础层面概述Kafka的知识点,后续在针对于单个的技术点扩展每篇博文。 Kafka背景介绍 Kafka基本架构组件 Kafka设计原理 Kafka用途 一:Kafka背景介绍 Kafka是一种高吞吐量的,分布式,快速、可扩展的,分区和可复制,基于发布/订阅模式的消息系统,由Linkedin开发,之后成为Apache项目的一部分。使用Scala语言编写,目前已被广泛应用于各行业各类型的数据管道和消息系统中。 kafka的设计目的是提供一个发布订阅解决方案,它可以处理消费者规模的网站中的所有动作流数据。 这种动作(网页浏览,搜索和其他用户的行动)是在现代网络上的许多社会功能的一个关键因素。 这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决。 Kafka分布式发布订阅设计图 二 :Kafka基本架构组件 1. Broker :[中间者,代理者] Kafka集群包含多台服务器

一、KafKa概述

若如初见. 提交于 2019-12-20 00:47:40
数据技术之 Kafka 版本:V1.0 一 Kafka概述 1.1 Kafka 是什么   在流式计算中,Kafka 一般用来缓存数据,SparkStreaming/Flink/Storm 通过消费 Kafka 的数据进行计算。 1)Apache Kafka 是一个开源消息系统,由 Scala 写成。是由 Apache 软件基金会开发的 一个开源消息系统项目。 2)Kafka 最初是由 LinkedIn 开发,并于 2011 年初开源。2012 年 10 月从 Apache Incubator 毕业。该项目的目标是为了处理实时数据提供一个统一、高通量、低等待的平台 3)Kafka 是一个分布式消息队列。Kafka 对消息保存时根据 Topic 进行归类,发送消息 者称为 Producer,消息接受者称为 Consumer, 此外 kafka 集群有多个 kafka 实例组成,每个 实例(server)成为 broker。 4)无论是 kafka 集群,还是 producer 和 consumer 都依赖于 zookeeper 集群保存一些 meta 信息,来保证系统可用性。 1.2 传统消息队列实现原理   (1)点对点模式(一对一,消费者主动拉取数据,消息收到后消息清除)     点对点模型通常是一个基于拉取或者轮询的消息传送模型,这种模型从队列中请求信 息,   

Kafka之Consumer Rebalance

一世执手 提交于 2019-12-19 13:13:11
文章目录 Kafka版本 rebalance rebalance策略 rebalance generation rebalance协议 rebalance流程 rebalance监听器 Kafka版本 kafka版本1.1.1,可能绝大部分也适用于kafka 0.10.x及以上版本。 rebalance ConsumerGroup(消费组) 里的 Consumer(消费者) 共同读取 topic(主题) 的 partition(分区) ,一个新的 Consumer(消费者) 加入 ConsumerGroup(消费组) 时,读取的是原本由其他 Consumer(消费者) 读取的消息。当一个 Consumer(消费者) 被关闭或发生奔溃时,它就离开 ConsumerGroup(消费组) ,原本由它读取的分区将有 ConsumerGroup(消费组) 的其他 Consumer(消费者) 来读取。在 topic 发生变化时(比如添加了新的分区),会发生 Partition 重分配, Partition 的所有权从一个 Consumer(消费者) 转移到另一个 Consumer(消费者) 的行为被称为 rebalance(再均衡) 。 rebalance(再均衡) 本质上是一种协议,规定了 ConsumerGroup(消费组) 中所有 Consumer(消费者) 如何达成一致来消费

kafka topic 删除

随声附和 提交于 2019-12-19 08:47:13
kafka topic 删除 方法一:通过kafka 命令来删除 方法二:使用zookeeper来删除topic 要删除的topic 名字为 test。 方法一:通过kafka 命令来删除 1.1 通过集群管理工具如ambari设置delete.topic.enable=true delete.topic.enable 1.2 通过kafka命令 删除topic ${KAFKA_HOME}/bin/kafka-topics.sh --delete --zookeeper hostname:2181 --topic test 执行完后,topic会被标记为删除状态,随后被删除。但是如果topic正在被使用,则topic不会被删除,这种情况下需要使用zookeeper来删除,见步骤二。 方法二:使用zookeeper来删除topic 2.1 通过集群管理工具如ambari 暂时关闭kafka。 2.2 通过zookeeper 来删除topic信息。 使用zkCli.sh 连接zookeeper ${zookeeper_home}/bin/zkCli.sh 删除topic # 查看topic信息 get /brokers/topics/test # 删除topic信息 rmr /brokers/topics/test rmr /admin/delete_topics/test

第一个开源框架的issue(RocketMQ)

荒凉一梦 提交于 2019-12-19 03:35:22
之前在学习RocketMQ的时候发现了一个问题,客户端和broker之间关于topic的长度判断不一致,客户端发消息的判断为org.apache.rocketmq.client.Validators#checkTopic,这里的CHARACTER_MAX_LENGTH为255 if (topic.length() > CHARACTER_MAX_LENGTH) { throw new MQClientException("The specified topic is longer than topic max length 255.", null); } broker端处理请求时会进行topic长度判断,这里的判断条件如下所示,这里Byte.MAX_VALUE为127,主要有三处地方org.apache.rocketmq.store.DefaultMessageStore#putMessage org.apache.rocketmq.broker.processor.SendMessageProcessor#sendBatchMessage org.apache.rocketmq.broker.processor.AbstractSendMessageProcessor#msgContentCheck if (requestHeader.getTopic().length() >