本文会演示使用Apache Kafka和Zookeeper进行微服务通信以及如何开始的基本流程。

微服务体系结构是一种将大型单一应用程序与另一个互相连接的独立模块(应用程序)以及使用API的外部数据源分离的原则。为了处理这些微服务和微服务 - 外部源通信,无论是API调用还是密集的数据处理,阻塞使用同步模型会导致整个应用程序无响应的线程,消息队列都会发挥作用。

Apache Kafka就是这样一个平台。正式地,它被称为具有高弹性和容错性的分布式流处理平台。这是通过在分布式系统协调中使用众多计算节点集群而获得的,其中由另一个称为zookeeper的apache平台维护。

这里是基本流程:

  1. 启动Zookeeper(为了协调)。

  2. 启动Kafka服务器(基本上是一个broker,在这种情况下,调解发布者[生产者]和订阅者[消费者]之间的消息)。

  3. Producer API(为了创建消息并排入Kafka)。

  4. 消费者API(为了消费来自Kafka队列的消息)。

(为此目的,我将使用控制台生产者和消费者进行简单的演示和理解)。

安装

安装Kafka和Zookeeper。

启动Zookeeper

运行以下脚本:

sh kafka / bin / zookeeper-server-start.sh ../config/zookeeper.properties
复制代码

现在动物园管理员监控已经准备就绪,我们可以开始我们的Kafka,这是消息中介。

sh kafka / bin / kafka-server-start.sh kafka / config / server.properties
复制代码

默认情况下,它在9092端口上运行,Kafka服务器作为代理。

所有推送到Kafka的消息在逻辑上被分类为“主题”。如果一个主题不存在,Kafka被配置为默认创建一个主题,但创建主题比较明智,因此我们可以在逻辑上区分我们的消息。这就是消费者如何查询Kafka的方式:“给我一个这个话题的消息。”

(注意:所有基本的基本任务,如创建,查看和删除主题,控制台消费者生产者操作等都预先捆绑在Kafka二进制文件中,我们可以通过给出适当的参数来使用它们)。

创建一个主题

sh kafka-topics.sh  - 创建 -  zookeeper localhost:2181  - 复制因子1 - 分区1 - 主题topic_name
复制代码

分区和复制因子

默认情况下,Zookeeper监视器在端口2181端口上运行。Kafka主题分为不同的分区。分区通过将特定主题中的数据分散到可能存在于不同计算节点中的多个代理,从而实现主题的并行化。标志“复制因子”决定了主题分区的副本数量。这是如何实现容错的。一个broker可能会失败,消费者仍然可以使用现场副本中的消息。同时,zookeeper管理员将监督宕机broker并采取纠正措施。

现在我们有一个Zookeeper和一个broker在运行一个主题,我们准备发送消息给Kafka并使用它们。在现实世界的软件中,这是通过流媒体API实现的,但出于演示目的,我们将使用基于控制台的制作者和消费者。

开始制作人:

sh kafka / bin / kafka-console-producer.sh --broker -list localhost:9092  - topic topic_name
复制代码

开始消费者:

sh kafka / bin / kafka-console-consumer.sh --bootstrap -server localhost:9092  - topic topic_name
复制代码

现在,无论输入到控制台制作者的什么输入都会通过Kafka传递给控制台用户。

我们还可以查看现有的消息:

斌/ kafka-console-consumer.sh --bootstrap -server本地主机:9092 --topic TOPIC_NAME --from -beginning
复制代码

Kafka是流处理的分布式消息传递平台。它更像是一个在分布式计算环境中建立的荣耀企业消息传递系统,并具有连接器以连接到外部数据源。

排队的需要


微服务体系结构固有地要求某种消息排队系统。当我们将一个庞大的单一应用程序拆分为更小,松散耦合的微服务时,这些微服务中REST API调用的数量就会增加,连接外部数据源的次数也会增加。保持这样一个巨大的互联系统同步是不可取的,因为它可以使整个应用程序无响应,并可以摆脱首先分裂成微服务的全部目的。因此,像Kafka这样的分布式平台上有一个消息队列系统,该系统具有高度的容错能力,并且通过像Zookeeper这样的服务持续监视代理节点,从而使整个数据流更加容易。

ML解决方案管道中的消息队列


像Kafka一样排队的另一个用例可以是各种ML解决方案管线。以非常简单的方式,这就是ML解决方案的构建方式:

客户端(移动,网络)上的用户界面 - →API服务器和数据库 - →机器学习(黑盒)。

机器学习黑盒可能非常计算量大,并且在阻塞同步模式下发出这些请求是不现实的。在这种情况下,可以将所有请求排队,并将消费者API配置为逐个接收这些请求并将它们提供给ML黑盒。该管道可以轻松处理计算密集型任务 - 例如识别来自数千个图像的对象,这需要相当长的时间 - 而不会丢失任何请求。

部署在容器中的微服务彼此交谈,由容错分布式的代理节点集群进行协调,并使用像Zookeeper这样的工具进行监控,看起来像是企业软件开发的新方式。

用于微服务和ML解决方案管道的消息队列(Kafka和Zookeeper)相关推荐

  1. .NET Core微服务之基于EasyNetQ使用RabbitMQ消息队列

    Tip: 此篇已加入.NET Core微服务基础系列文章索引 一.消息队列与RabbitMQ 1.1 消息队列 "消息"是在两台计算机间传送的数据单位.消息可以非常简单,例如只包含 ...

  2. 【BPM技术】Zeebe是一个用于微服务编排的工作流引擎。

    Zeebe是一个用于微服务编排的工作流引擎. 这篇文章将帮助你确切地了解什么是Zeebe以及它如何可能与你相关.我们将简要介绍Zeebe以及它所解决的问题,然后再进行更详细的介绍. 我们将在整个写作过 ...

  3. Istio:一个用于微服务间通信的服务网格开源项目

    http://www.infoq.com/cn/news/2017/05/istio Istio:一个用于微服务间通信的服务网格开源项目 Google.IBM和Lyft开源了微服务管理.保护和监控框架 ...

  4. Docker-compose编排微服务顺序启动解决方案

    Docker-compose编排微服务顺序启动解决方案 参考文章: (1)Docker-compose编排微服务顺序启动解决方案 (2)https://www.cnblogs.com/nieqibes ...

  5. Zeebe:用于微服务编排的开源工作流引擎--Camunda出品

    Zeebe是一个用于微服务编排的开源工作流引擎 Zeebe使用可视化工作流满足工作人员对微服务进行编排.Zeebe是水平可伸缩和容错的,因此您可以可靠地处理发生的所有事务. 详细介绍:  What i ...

  6. Linux进程间通信--进程,信号,管道,消息队列,信号量,共享内存

    Linux进程间通信--进程,信号,管道,消息队列,信号量,共享内存 参考:<linux编程从入门到精通>,<Linux C程序设计大全>,<unix环境高级编程> ...

  7. c++ createtoolhelp32snapshot取进程路径_Linux进程间通信(上)之管道、消息队列实践

    1.进程间通信简述 进程间通信的几种方式:无名管道.有名管道.消息队列.共享内存.信号.信号量.套接字(socket). 进程间通信是不同进程直接进行的一些接触,这种接触有简单,有复杂.机制不同,复杂 ...

  8. 进程间通信IPC(一)(半双工管道和消息队列)

    引言: 之前学习的进程之间交换信息的方法只能由fork或exec传送打开文件,或者文件系统.但是这种通讯方式有局限性,接下来将说明进程之间相互通信的其他技术--IPC(InterProcessComm ...

  9. Linux进程通信的四种方式——共享内存、信号量、无名管道、消息队列|实验、代码、分析、总结

    Linux进程通信的四种方式--共享内存.信号量.无名管道.消息队列|实验.代码.分析.总结 每个进程各自有不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不到,所以进程之间要交换数据必须 ...

  10. Linux 下的进程间通信:管道、消息队列、共享文件、共享内存

    Table of Contents 无名管道 命名管道 消息队列 共享文件 示例 1. 生产者程序 示例 2. 消费者程序 共享内存 示例 3. memwriter 进程的源程序 示例 4. memr ...

最新文章

  1. Win7安装visual c++ 2015 redistributable x64失败
  2. python解析库beautifulsoup_12_Python_解析库_BeautifulSoup的使用
  3. 优化混合云性能:数据管理技巧大公开
  4. 列名或所提供值的数目与表定义不匹配_关于功放与音箱的功率如何匹配
  5. (设计模式之一)浅析简单工厂模式
  6. 11、classmethod和staticmethod
  7. eclipse-indigo 中 user libraries 自动部署 WEB-INF/lib 配置
  8. Java学习(8):贪吃蛇游戏
  9. 校园二手交易平台-简要需求分析
  10. [R]_R里如何将多个Excel文件合并为一个Excel文件多个Sheet
  11. HTML5课题意义,毕业论文选题的意义万能套话
  12. Php支付宝掉线,12月5日支付宝崩了怎么回事支付宝登陆不上去一直掉线怎么办
  13. 小米无线路由器服务器用户名和密码忘了,小米路由器忘记密码怎么解决?设置新密码登陆方法介绍...
  14. Android Bluetooth蓝牙scan过程
  15. 批处理:批量修改文件名称
  16. zcmu之水题来一波~
  17. 小型NAS搭建实例②——ubuntu server 的一些设置,包含NFS挂载,CIFS挂载,常用工具安装
  18. Spring 源码分析(一) —— 迈向Spring之路(转载)
  19. IDEA创建的maven项目没有src目录问题解决
  20. CNS可增值积分区块链应用未来趋势如何

热门文章

  1. Jumpserver代码规范
  2. Sandbox简介和路径获取
  3. (转)Servlet
  4. JSP之【include】指令
  5. Silverlight使用WCF实现数据通信
  6. Arturia DX7 V for Mac(模拟FM数字合成器)
  7. 在Mac上如何设置自动解压下载的压缩文件?
  8. 搭建vue项目时运行npm run dev 报错问题解决
  9. EH使用IPMI基础操作
  10. icinga+cacti整合