为什么已有Kafka,我们最终却选择了Apache Pulsar?

深入了解 Kafka 和 Pulsar 的区别 在本篇博文中,我们将深入探讨 Apache Kafka 和 Apache Pulsar 之间的主要区别。通过研究这两个消息传递系统的核心区别和独特功能,我们希望让您初步了解它们的核心机制和实现。我们希望这种分析不仅能帮助您在两者之间做出选择时做出明智的决定,而且还能作为宝贵的资源来支持进一步探索和理解它们的功能。 阅读详情

**在一家商业公司,采用任何一项新技术,包括开源技术,都有一定的风险,即使这项技术具有显著的技术优势。**Apache Pulsar 的引入经过了我们的深思熟虑和充分调研。我想跟大家分享一下我们使用和调研 Apache Pulsar 的经验。因为我们相信肯定有其他和我们类似的公司也可以从 Pulsar 中受益。

Apache Pulsar 是我们为了支持 STICORP 客户应用而采用的一项关键技术。STICORP 是一家总部位于巴西的软件公司。我们提供软件解决方案来帮助 7,000 多家客户管理和自动化他们的税务报告,帮助他们确保税务报告的合规性,避免处罚,并确定可以节省税收的地方。这需要管理大量的税务文档,以及大量由客户行为触发产生的工作流程。这些税务文档包括发票,发货和付款等。在一天内,单个客户可能就会产生超过 200,000 个需要我们进行处理的税务文档。

我们的系统通过与客户和政府系统进行集成自动获取这些税务文档,并以便于客户分析这些文档背后的数据价值的方式组织它们。这些文档的内容和复杂性取决于需要解决的特定业务流程。例如,有些文档是基于发票,发货订单,和客户与供应商之间的付款记录等,而另外一些文档是用于记录这些活动完成时的附加文档。

处理这些文档中的所有不同信息需要一个包含多个步骤的工作流程。文件通常以加密形式到达,因此第一步是解密它们。然后将文档中的 XML 格式的原始消息内容转换为 JSON 格式。从那之后,这些文档会被划分到多个主题(Topic)并被丢到事件总线(Event Bus)上。其他工作流程会监听事件总线,并处理这些文档,最终将处理结构汇总到下游的 Couchbase NoSQL 数据库中,供其他应用程序访问。

性能和可扩展性对我们来说至关重要。因为生成这些文档的交易的天然性质,我们可以看到单个客户在突发高峰时刻可能就会产生每秒 25,000 条消息。能够支持大量主题对我们来说也很重要 - 能够将文档中的信息分解为多个主题,可以帮助我们更加轻松地组织和管理数据,将数据正确的分发和连接到相应的工作流进行处理;但这也意味着我们对于单个客户可能就需要使用 30 个不同的主题。

为什么我们需要新技术

我们最初使用 Apache Kafka 来实现事件总线。虽然我们有一个稳定的 Kafka 基础设施,并且决定去做出基础设施的改变通常并不容易,但我们意识到 Kafka 不是满足我们需求的最佳技术 - Kafka 并不是为我们今天生活的云原生(Cloud Native)世界所设计的,因此我们需要花费大量时间才能使其适用于我们的应用程序。 我们使用 Kafka 面临的主要挑战是它不善于处理大量主题。此外,Kafka 的架构让我们感到痛苦 -因为 Kafka Broker 是绑定存储状态的,扩展或缩小 Kafka 集群需要重新平衡分区,这会影响我们的性能和请求时延,并限制我们对工作负载变化做出反应的方式和速度。
欢迎工作一到五年的Java工程师朋友们加入Java技术交流:611481448
群内提供免费的Java架构学习资料(里面有高可用、高并发、高性能及分布式、Jvm性能调优、Spring源码,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多个知识点的架构资料)合理利用自己每一分每一秒的时间来学习提升自己,不要再用"没有时间“来掩饰自己思想上的懒惰!趁年轻,使劲拼,给未来的自己一个交代!
部署 Apache Pulsar

在寻找替代方案时,我们了解了 Apache Pulsar 并决定对其进行评估。由于 Apache Kafka 和 Apache Pulsar 使用类似的消息概念,因此我们看到 所有的 Kafka 用例可以使用 Pulsar 实现,其方式与使用与 Kafka 完全相同。兼容是促使我们切换到 Pulsar 的原因之一。

我们还注意到了 Pulsar 在架构设计上与 Kafka 的一些重要差异。一个关键的区别是 存储和计算的分离 - Pulsar Broker 是无状态的,与存储相互分离;而在 Kafka 的数据直接存储在 Broker 上。这是架构设计差异上的一个例子,它允许 Pulsar 能够实现一些在 Kafka 上做很困难或不可能的事情。这其中的例子包括:

**主题可扩展性:**我们需要拥有超过 100,000 个主题(不考虑增长),这不仅有助于我们管理应用程序处理的不同类型的数据,还允许个别客户使用自定义应用程序连接到系统中的数据。Pulsar 的架构可以轻松处理数百万个主题。
**性能:**由于 Pulsar 的分层架构,以及 IO 隔离的特性,读取和写入使用不同的物理存储。因此,读取的峰值根本不会影响写入性能,反之亦然。Pulsar 还支持非持久性主题,允许非常高的吞吐量,完全不需要持久性的主题,这对于实时应用程序非常有用。
消息队列: Pulsar 提供了统一的消息模型,不仅支持类似 Kafka 的消费模式,也支持消息队里的消费模式。在不需要考虑有序性的应用场景中,Pulsar 可以直接当消息队列进行使用。Pulsar 在订阅(Subscription)级别而不是主题级别执行此操作,因为你可以在同一个主题中同时有按序消费的消费者和不按序消费的消费者,这对于很多场景是非常有价值。另一个场景,如果新的消费者需要从头开始读取一个主题里面的所有消息,那么对于 Kafka 来说,你将被迫要么牺牲吞吐量,要么重新平衡分区,或者要么牺牲有序性。而使用 Pulsar,您只需添加新订阅,Pulsar 就会将消息扇出到新增的消费者,以增加新消费者的吞吐量。
**操作更简单:**使用 Apache Kafka,任何容量扩展都需要重新平衡分区,同时还需要将被平衡的分区重新拷贝到新添加的 Broker 上。使用 Pulsar,我们可以轻松添加和删除节点,而无需重新平衡整个集群。此外,使用 Pulsar,你永远不必担心一个分区是否会超过 Broker 的物理磁盘空间;但是在 Kafka 中,一个分区的容量不能超过一台 Broker 的物理磁盘空间。
**无限的数据保留期:**我们的一些客户甚至需要在几个月后访问他们的文档。我们希望能够将数据保存在 Pulsar 中,而不会删除它,并在以后需要时使用它。这样我们不必重新从客户或者政府部门导入数据,我们也不必担心丢失消息。当我们需要使用新的一套系统来执行一个新的业务流程时,我们不需要访问数据库,我们可以简单地将文档从消息总线中拉取出并为新的业务流程重新处理它们即可。
由于 Apache Pulsar 提供了太多无法忽视的优点,我们决定实施并部署了 Apache Pulsar,在使用的过程中也对 Apache Pulsar 非常满意。我们已经将超过 30%的生产数据流迁移到 Pulsar,并计划在未来六个月内将所有数据流都迁移到 Pulsar。

喜欢小编轻轻点个关注吧!

Pulsar和Kafka扩容 扩容时,主要增加 Broker、BookKeeper、ZooKeeper 和 Proxy 节点,并进行数据迁移和负载均衡。 阅读详情

相关推荐

Apache Kafka、Apache Pulsar和RabbitMQ性能测试对比

Apache Kafka、Apache Pulsar和RabbitMQ都可以用作消息中间件平台,可对比的项目非常多,但是通常最关心的就是性能。在本文中,将专注于系统的吞吐量和延迟,因为这些是生产中事件流系统的主要性能指标。吞吐量测试尤其可以衡量每个系统在利用硬件(特别是磁盘和CPU)方面的效率。延迟测试可衡量每个系统与实时消息传递之间的接近程度,其中包括高达p99.9%的尾部延迟,这是实时和关键业务系统以及微服务架构的核心要求。 从测试结果来看,Kafka提供了最佳的吞吐量,同时提供最低的端到端延迟,最高可

weixin_47082274的博客 2349

10 分钟了解 Pulsar:针对 Kafka 用户的指南

本文翻译自 StreamNative 博客《Understanding Pulsar in 10 Minutes: A Guide for Kafka Users》,作者 Elliot West,StreamNative 软件工程师。本文由 StreamNative 组织翻译。译者简介王中兴,社区昵称 AlphaWang,就职于 eBay 消息中间件。本文将结合你现有的 Apache Kafka ...

Apache Pulsar 873

BUPT软件安全实验三

可以看出栈溢出对程序运行的安全性有很大的威胁,如果不对栈进行保护,只要系统中存在栈溢出漏洞,即可令攻击者通过非正当方法获取操作权限。(6)解决思考题,即:在不修改StackOverrun程序源代码的情况下,构造shellcode,通过JMP ESP的方式实现通过记事本打开shellcode.txt(可使用CreateProcessA或WinExec等API)。查看缓冲区信息,可以看到dest指向地址0x0012FAF0,其为数组的存放起始位置,也就是shellcode注入的起始位置。

7xun's space 1966

Kafka 和 Pulsar到底有什么不同?

Kafka 是一个分布式事件流平台,旨在处理高速、大容量和容错数据流。它最初由 LinkedIn 开发,后来捐赠给了 Apache 软件基金会。Kafka 已迅速成为构建实时数据管道、事件驱动架构和微服务应用程序的热门选择。核心能力发布和订阅记录流。以容错和持久的方式存储记录流。与配套服务协同工作,在记录发生时处理记录流(Kafka Streams 和 ksqlDB)。主要特点为实时数据流提供高吞吐量、低延迟的消息传递。支持数据分区和复制的可扩展架构。

java_beautiful的博客 1296

手把手教你搞定国民技术N32G031的Keil开发环境(附Pack包和JLink配置)

本文详细指导如何搭建国民技术N32G031的Keil开发环境,包括Keil MDK安装与激活、Pack包导入、JLink调试器配置等关键步骤。特别针对新手常见问题提供解决方案,帮助开发者快速上手N32G031系列MCU的开发工作。

cuangu9341的博客 427

在Pycharm中配置Pyqt5工具(2023年新版教程)

在Pycharm中配置Pyqt5相关的三个工具:QtDesigner、PyUIC、PYRCC

网络技术和Python 2万+

kafka测试工具_Apache Pulsar和Kafka之间的性能比较

最初于2019年8月29日发布在Kafkaesque博客上。Apache Pulsar,Apache Kafka和Apache BookKeeper是Apache Software Foundation的商标。Apache Kafka以其高性能而闻名。 它能够处理高速率的消息,同时保持较低的延迟。 Apache Pulsar是快速增长的Kafka的替代品。 有报告表明,Pulsar具有比Kafka...

weixin_39748445的博客 1468

避坑指南:ZYNQ平台上AXI 1G/2.5G Ethernet Subsystem实现IEEE1588的5个关键点

本文详细解析了在ZYNQ平台上使用AXI 1G/2.5G以太网子系统实现IEEE1588精密时间协议(PTP)的5个关键避坑点。从硬件选型、Vivado工程配置到Linux驱动适配,提供了实战经验与优化技巧,帮助工程师在工业自动化、电力系统等场景中实现纳秒级时间同步。

weixin_30687051的博客 238

技术探究|基于 Apache Pulsar 构建实时数据仓库

文章摘要本文整理自 ApacheCon 2022 上 StreamNative 工程师杨子棵、刘德志的分享《Build One Real-time WareHouse Based on Apache Pulsar》。本文将介绍数仓架构的演进与挑战、Apache Pulsar 架构以及 Pulsar 作为云原生消息队列能否满足实时数仓的要求,然后分享基于 Apache Pulsar、Apache F...

Apache Pulsar 1170

[27] cuda 应用之 核函数实现图像通道变换

[27] cuda 应用之 核函数实现图像通道变换

yohnyang的博客 203

Android 13.0 双屏时触摸失效问题排查与修复

摘要:本文记录了RK3588 Android12开发板上主屏触摸失效问题的排查与解决过程。通过分析发现,USB触摸设备被错误关联到辅屏(displayId=3)而非主屏(displayId=0)。解决方案是修改TouchInputMapper.cpp,强制触摸设备使用INTERNAL viewport(主屏),并保持设备在viewport不活跃时仍启用。该修改涉及约40行代码,有效解决了多显示器环境下触摸设备错误映射的问题,同时提供了详细的调试方法和注意事项。

ip0417的博客 354

技术专家:为什么我们最终选择Apache Pulsar替代Kafka?

导读:在传统消息系统中,存在一些问题。一方面,消息的存储和服务一般是紧耦合的,节点的扩容和运维不便,特别是在需要多备份来保证高可用性的场景。另一方面,消息的消费模式被固定,在企业内部需要维护多套系统来保证不同的消息消费场景。另外消息系统中,多租户,多机房互备等企业级的特性和功能也不太丰富。Apache Pulsar采用了分层的架构,解决了存储计算的耦合,同时提供了很好的扩展性和可维护性。Pulsa...

weixin_34320724的博客 1607

杰理SDK UART 使用教程

本文介绍了JL701n芯片的UART串口通信使用教程,重点讲解了UART2的初始化配置、数据收发和中断处理功能。教程详细说明了代码结构、核心功能函数、配置参数和使用步骤,包括UART初始化、数据发送和接收中断处理等关键操作。同时提供了完整的API接口说明和注意事项,强调了中断处理限制、缓冲区管理、引脚配置等重要细节。最后给出了基本使用流程和高级任务处理示例,并针对常见问题提供了故障排除建议。本教程适用于需要在JL701n芯片上实现可靠串口通信的开发者。

qq_42014563的博客 1819

重大技术转向:LinkedIn 抛弃自家创造的 Kafka ,又重新造了个 Pulsar 的轮子?

同时,协调器还维护 Segment 的元数据,如 Segment 的副本集、Segment 的激活/封存/重新分配状态、Segment 的起始偏移和长度以及创建时间和封存时间。团队利用这种广播机制发布精简的全局集群状态信息,包括基本的主机信息、端口配置和集群中 Broker 的属性,以及 DS-RSM 哈希环的关键信息,如每个 vnode 的哈希边界范围、vnode 的领导者信息、当前任期和复制状态等。为实现高扩展性,它采用了数据和元数据分片技术,维持最小化的全局状态,并利用分散式的集群成员协议。

Apache Pulsar 899

C语言试题三之计算并输出 s=1+(1+2^(0.5))+(1+2^(0.5)+3^(0.5))+…+(1+2^(0.5)+3^(0.5)+…+n^(0.5))

1 、题目 计算并输出 s=1+(1+2^(0.5))+(1+2^(0.5)+3^(0.5))+…+(1+2^(0.5)+3^(0.5)+…+n^(0.5)) 2、部分函数说明 C 库函数 double pow(double x, double y) 返回 x 的 y 次幂。 3、源代码实现 #include <stdio.h> #include <...

码莎拉蒂 4609

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Pulsar 介绍 | 为什么选择 Apache Pulsar 而不是 Kafka

本文翻译自 Saket Jain 的系列博客《Choosing Apache Pulsar Over Kafka》。文章讲述了 Apache Pulsar 的优势、常用配置并针对 Linux 系统给予了相应调优建议,值得推荐。作者:Anshul Singh,译者:傅腾注:为了行为顺畅,有部分调整。翻译不易,有任何问题,都可以小窗公众号私信,或者直接联系 Pulsar Bot :)第一部分:探索 P...

Apache Pulsar 1761

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Pulsar vs Kafka,CTO 如何抉择?

本文作者为 jesse-anderson。内容由 StreamNative 翻译并整理。本文以三个实际使用场景为例,从 CTO 的视角出发,在技术等方面对比 Kafka 和 Pulsar...

Apache Pulsar 3702

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

已有Kafka,可替换方案:Apache Pulsar

已有Kafka,可替换方案:Apache Pulsar

记事本 2955

我为什么放弃Kafka,选择Pulsar?

“ 最近,我一直在研究 Pulsar 及其与 Kafka 的比较。通过快速搜索,你会看到这两个最著名的开源消息传递系统之间正在进行的"战争"。图片来自 Pexels作为 ...

weixin_45727359的博客 919

选择 APACHE PULSAR 而非 KAFKA 的另外 5 个原因

原作者:Chris Bartholomew 翻译:StreamNative——Sijia 前段时间,我在一篇博客中提到了选择 Apache Pulsar 而不是 Apache Kafka 的 7 个原因。之后我一直在准备一份比较 Kafka 和 Pulsar 的详细报告,并一直与 Pulsar 开源项目的用户交谈,同时也与我们托管的 Pulsar 服务 —— Kafkaesque 的用户交谈。我发现上一篇文章中我遗漏了一些原因。所以,我特地写了本篇后续,进行补充。 在补充之前,我们先来快速回顾一下上一篇文章

Apache Pulsar 774

Apache Pulsar数据迁移工具:从Kafka到Pulsar无缝迁移

你是否正在为Kafka集群的扩展性瓶颈而烦恼?是否需要一个更可靠、更灵活的消息系统来支撑业务增长?Apache Pulsar作为下一代分布式消息流平台,提供了从Kafka到Pulsar的无缝迁移方案。本文将详细介绍如何使用Pulsar的Kafka Connect Adaptor工具,在不中断业务的情况下完成数据迁移,让你轻松应对万亿级消息处理需求。 ## 迁移工具概述:Kafka Connect...

gitblog_00765的博客 1061

Apache Kafka与Apache Pulsar:如何选择

如今,可扩展的发布/订阅消息传递实际上是Apache Kafka的同义词。 无论您要添加Apache Storm或Apache Spark之类的东西进行处理还是使用Apache Kafka本身提供的处理工具,Apache Kafka仍然是分布式流应用程序的坚如磐石的,开源的首选。 但是,卡夫卡并不是镇上唯一的游戏。 由雅虎开发,现在是Apache软件基金会项目, Apache Pulsar...

cxu0262的博客 543

KoP 正式开源:在 Apache Pulsar 上支持原生 Kafka 协议

我们很高兴地宣布 StreamNative 和 OVHcloud 开源了 “KoP“(Kafka on Pulsar)。KoP 将 Kafka 协议处理插件引入 Pulsar broker。这样一来,Apache Pulsar 就支持原生 Apache Kafka 协议。将 KoP 协议处理插件添加到现有 Pulsar 集群后,用户不用修改代码就可以将现有的 Kafka 应用程序和服务迁移到 Pulsar。这样,Kafka 应用程序就可以使用 Pulsar 的强大功能,例如: 利用企业级多租户特性简化运.

Apache Pulsar 2165
上一篇: 简化你的Java代码,让工作更高效|语言
下一篇: Kafka实践:到底该不该把不同类型的消息放在同一个主题中?
java1856905
博客等级 码龄8年 100粉丝 249原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值