CTO问我Pulsar到底能不能取代Kafka

CTO问我Pulsar到底能不能取代Kafka? Pulsar是一款分布式发布/订阅消息平台,近两年非常火,被称为下一代的消息流平台,大有取代Kafka的势头。今天我们就来比较一下Pulsar跟Kafka。 历史背景 Pulsar源自Yahoo,于2016年开源并捐献给Apache基金会,并在2018年9月升级成为Apache顶级项目。 Kafka最初由Linkedin开发,并于2010年贡献给了Apache基金会,之后成为Apache顶级项目。 架构 Kafka Kafka架构由broker和zookeeper组成,如下图: [1] 阅读详情

Pulsar是一款分布式发布/订阅消息平台,近两年非常火,被称为下一代的消息流平台,大有取代Kafka的势头。今天我们就来比较一下Pulsar跟Kafka。

历史背景

Pulsar源自Yahoo,于2016年开源并捐献给Apache基金会,并在2018年9月升级成为Apache顶级项目。

Kafka最初由Linkedin开发,并于2010年贡献给了Apache基金会,之后成为Apache顶级项目。

架构

Kafka

Kafka架构由broker和zookeeper组成,如下图:

CTO问我Pulsar到底能不能取代Kafka

[1]

注意:Kafka2.8版本可以不依赖Zookeeper独立运行了

Pulsar

Pulsar的架构如下:

CTO问我Pulsar到底能不能取代Kafka

Pulsar Broker会在本地缓存消息,并且支持TTL,

从上面的2个架构我们看到,Kafka和Pulsar有3点不同:

  • Pulsar采用分层架构,将计算和存储相分离,存储使用BookKeeper集群,计算使用Broker集群,Broker需要内置BookKeeper客户端。
  • Pulsar的部署和架构更加复杂,但是也更具有伸缩性。
  • Pulsar在最新版本中依然不能脱离Zookeeper独立运行。

消息存储模型

Kafka

Kafka采用分区(Partition)的方式来保存topic,模型图如下:

CTO问我Pulsar到底能不能取代Kafka

每个topic都会在不同的broker保存多个分区副本,其中只有一个副本的分区是leader分区,供消费者使用。如果某个broker宕机了,这个broker上的leader分区失效,需要在其他broker上重新进行选举。

Pulsar

跟Kafka不同的是,Pulsar的消息存储模型采用了分层的方式,如下图:

CTO问我Pulsar到底能不能取代Kafka

[2]

第一层是Topic,用来存储Producer追加的messages,Topic下面是ledger层,保存了分片(Segment),分片里面保存更小粒度的ertries,entries存储一条条的Message。

Bookkeeper中,数据的最小操作单位是Segment。

Ledger中的最后一个分片是最新写入的分片,如上图Segment-2。Segment-2之前的所有分片已完成封装,这些分片的数据是不会再发生变化的。这样增加或删除一个BookKeeper节点,或者迁移长期存储节点,都不会发生一致性问题。

消息消费模型

Kafka

Kafka的消费模型是采用消费者组的模式,每一个分区只能给消费者组中的一个消费者消费。如下图:

CTO问我Pulsar到底能不能取代Kafka

Pulsar

Pulsar的消费模型如下图:

CTO问我Pulsar到底能不能取代Kafka

[3] Pulsar的topic是一种partitioned topic,可以被保存到多个broker,提高了topic的吞吐量。

Consumer通过Subscription获取消息,同一Topic的Subscription可以获取到Topic数据的完整拷贝,这样Subscription为每一个Consumer分配一个Cursor,Consumer之间互不影响。如下图:

CTO问我Pulsar到底能不能取代Kafka

Pulsar的消费模型有4种:

  • 独占模式(Exclusive):同一个topic只能有一个消费者订阅,如果多个消费者订阅,就会出错。
  • 灾备模式(Failover):同一个topic可以有多个消费者订阅,但是只能有一个消费者消费,其他订阅的消费者作为故障转移的消费者,只有当前消费者出了故障才可以进行消费当前的topic。如下图:
CTO问我Pulsar到底能不能取代Kafka

  • 共享订阅(Shared):同一个topic可以由多个消费者订阅和消费。消息通过round robin轮询机制分发给不同的消费者,并且每个消息仅会被分发给一个消费者。当消费者断开,发送给它的没有被消费的消息还会被重新分发给其它存活的消费者。如下图:
CTO问我Pulsar到底能不能取代Kafka

  • Key_Shared:消息和消费者都会绑定一个key,消息只会发送给绑定同一个key的消费者。如果有新消费者建立连接或者有消费者断开连接,就需要更新一些消息的key。如下图:
CTO问我Pulsar到底能不能取代Kafka

多租户

Pulsar

Pulsar是一个多租户系统,租户可以跨集群分布,每个租户都可以有单独的认证和授权机制。租户也是存储配额、消息 TTL 和隔离策略的管理单元。

Pulsar中topic的URL如下,可以看到租户是最基本的管理单位:

persistent://tenant/namespace/topic

上面的URL可以看到,Pulsar通过tenant和namespace来支持多租户。

namespace是一个术语,指租户的管理单元。同一个namespace上设置的配置策略适用于在namespace中创建的所有 topic。

Pulsar为实例中的每个租户分配:

  • 授权机制
  • 适用于租户配置的集群配置

Kafka

Kafka为了控制客户端对broker资源的限制,从0.9版本引入了配额(quotas)管理,强制客户端请求使用配额。目前Kafka支持两种类型的配额:

  • 网络带宽配额,用来定义byte-rate阈值(从0.9版本开始)
  • 请求速率配额,将CPU利用率阈值定义为网络和I/O线程的百分比(从0.11开始)

生产者和消费者有可能以很高的速率生产和消费大量的请求,从而垄断broker资源,导致网络饱和,最终影响到其他客户端和broker本身。使用配额可以防止这些问题,让集群体验更好。

运维

集群部署

Kafka去除Zookeeper以后,部署是非常简单的。而Pulsar目前还没有去除Zookeeper的详细计划,而且需要使用到BookKeeper集群,部署复杂不少。

扩容

Pulsar支持自动负载均衡,这对于增加broker节点和增加存储节点都非常方便。

云原生支持

Pulsar 计算和存储节点分离,对云原生支持很好。

Kafka 多数组件也支持云原生。

替换broker

Pulsar的broker节点是无状态的,替换时不用考虑数据丢失。

社区

Pulsar社区发展非常迅速,StreamNative 还推出了StreamNative Hub来支持Pulsar社区建设。[4]

但Pulsar毕竟是一个新型的消息中间件,文档和社区都不太完善。在过去的一年多时间里,Pulsar在这方面做了很多的努力,包括举办全球峰会,创作视频和培训教程,邀请专业讲师进行培训。

使用Pulsar时,遇到的一些问题可能在网上找不到答案,需要查找源代码来解决。这对于中小公司来说,无疑增加了使用成本。

而Kafka作为非常成熟中间件,用户遇到的问题也非常多,新用户可以很方便地从网上找到答案。

总结

Pulsar作为新型的云原生分布式消息流平台,确实有很多优秀的设计理念。

在Yahoo内部支持应用服务平台中 140 万个topic,日处理消息超过 1000 亿条。腾讯的分布式交易引擎 TDXA也使用了Pulsar,应用于腾讯的计费平台。 [5]

kafka目前的使用场景最多的还是日志大数据处理,对金融场景的应用比较少。

但这并不能说明Pulsar可以取代Kafka,Kafka用户群体庞大,社区和资源完善,而且在2.8版本中去除了Zookeeper,部署非常容易。毕竟不是每家公司都需要Yahoo和腾讯这样的集群体量。

如果觉得本文对你有帮助,可以转发关注支持一下

pulsar-dotpulsar:适用于Apache Pulsar的.NETC#客户端库 点脉冲星 适用于.NET / C#客户端库。 DotPulsar完全用C#编写,并实现了Apache Pulsar的。 其他选择是使用(这是和)或在之上构建。 我们决定实施二进制协议来获得完全控制并最大程度地提高可移植性和性能。 DotPulsar的API受Apache Pulsar的官方强烈启发,但是100%匹配并不是目标。 什么是新的? 看一下。 入门 让我们看一个“ Hello world”示例,在该示例中,我们首先生成一条消息,然后使用它。 安装NuGet软件包并复制/粘贴下面的代码(您将需要对'DotPulsar'和'DotPulsar.Extensions'使用声明)。 立即下载

相关推荐

Android开发- (2)MediaProjection API实战:构建高效屏幕共享与远程控制方案

本文深入探讨了Android开发中利用MediaProjection API实现高效屏幕共享与远程控制方案的实战方法。文章从权限申请、虚拟屏幕创建讲起,详细解析了图像捕获、编码压缩、Socket网络传输的核心流程,并进一步介绍了如何构建双向控制通道及关键的性能优化与避坑指南,为开发者构建稳定可用的远程协作应用提供了完整路径。

weixin_29207533的博客 450

消息中间件:Puslar、Kafka、RabbigMQ、ActiveMQ

RabbitMQ是一个开源的消息代理和队列服务器,用于通过轻量级和可靠的消息传递进行应用程序之间的通信。在选择时,需要考虑业务需求、性能要求、可靠性、易用性等因素。Kafka最初由LinkedIn公司发布,是一个高吞吐量的、持久性的、分布式发布-订阅消息系统。ActiveMQ常被用于系统业务的解耦、异步消息的推送、增加系统并发量,以及提高用户体验。Kafka主要用于处理活跃的数据,如登录、浏览、点击、分享、喜欢等用户行为产生的数据。它提供标准的、面向消息的、能够跨越多语言和多系统的应用集成消息通信中间件。

IT深耕十余载,大道之简 1116

SAP FIORI静态磁贴从零到一:配置实战与权限打通

本文详细介绍了SAP FIORI静态磁贴的配置流程与权限管理,从准备工作到后台配置、目标映射、前台组织及权限分配,提供了实战技巧与常见问题解决方案。重点解析了静态磁贴的创建、目标映射配置及权限打通等关键步骤,帮助用户快速掌握FIORI静态磁贴的配置方法。

weixin_29266647的博客 249

apache pulsar

pulsar最初由Yahoo开发,并于2016年底开源,现在是Apache软件基金会的一个孵化器项目。Pulsar在Yahoo的生产环境运行了三年多,助力Yahoo的主要应用,如Yahoo Mail、Yahoo Finance、Yahoo Sports、Flickr、Gemini广告平台和Yahoo分布式键值存储系统Sherpa。 pulsar和kafka最显而易见的区别是,pulsar支持多租...

orange596的专栏 515

5个必知的脑网络图论指标:从聚类系数到小世界特性(附BCT工具包使用指南)

本文深度解析脑网络图论分析中五个核心指标:聚类系数、特征路径长度、全局效率、局部效率及节点效率,并详解其计算与解读。结合Brain Connectivity Toolbox工具包,提供从实战计算、常见报错解决到小世界特性统计检验的完整指南,帮助研究者跨越理论与实操鸿沟,让连接矩阵数据真正服务于神经科学研究。

blue42的博客 925

RAG-Anything 实战:构建企业级多模态知识图谱问答系统

本文详细介绍了如何利用RAG-Anything构建企业级多模态知识图谱问答系统,解决跨模态文档处理的痛点。通过架构设计解析、部署实战指南和典型业务场景解决方案,帮助企业实现高效的知识管理和智能检索,提升决策效率。

weixin_29089057的博客 385

Pulsar 替代 Kafka 的原因

架构图。

qq798280904的博客 928

基于gem5模拟trace的cache模拟器的实现

在做计算机体系结构的时候,模拟器是一个重要且又有效的工具。其中gem5集成了gem和m5的优点,使用起来比较简单和方便。其中包括了se模式和fs模式,se模式是在gem5运行我们已经编译好的程序,可以获取cache,cpu状态等数据,fs模式下可以模拟操作系统,我们可以将我们自己修改的linux内核加载到哥们上运行。下面介绍了使用gem5的se模式,运行编译好的ARM可执行文件。获取访存的trac

gaoxiang的专栏 8891

Pulsar对比Kafka,为什么用Pulsar代替Kafka

Pulsar与Kafka一样是分布式消息中间件 Pulsar特性: 1.线性扩展。能够丝滑的扩容到成百上千个节点(Kafka扩容需要占用很多系统资源在节点间拷贝数据,而Plusar完全不用) 2.高吞吐。每秒数百万消息 3.低延迟。在大规模的消息量下依然能够保持低延迟(< 5ms) 4.持久化机制。Plusar的持久化机制构建在Apache BookKeeper之上,提供了写与读之前的IO隔离 5.基于地理位置的复制。Plusar将多地域/可用区的复制作为首要特性支持。用户只需配置好可用区

不经意的博客 9205

SAP S/4HANA 中 RAP 业务对象接口的消费模式

本文探讨了SAP S/4HANA中RAP业务对象接口的消费模式,重点介绍了通过EML直接调用和CDS投影两种Clean Core开发路径。文章分析了BO Interface作为稳定契约的价值,并提供了BAdI集成、OData服务发布等实际场景案例,同时对比了OData V2/V4的技术选型考量,最后强调了ADT向导使用中的DCL权限注意事项。全文旨在帮助开发者构建升级友好的业务对象消费方案。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 758

Darknet-Yolov3 移植过程

本教程面向使用寒武纪平台进行深度学习推理任务的开发者。针对当前主流检测网络darknet-yolov3,进行寒武纪平台的移植。开发者对照移植过程,能够利用寒武纪智能处理器设备完成多种场景的目标检测任务。本实验代码基于 Neuware 1.6.1 与 Python 2.7 环境。

shengyin714959的博客 438

Pulsar与Rocketmq、Kafka、Inlong-TubeMQ,谁才是消息中间件的王者?

导语|Pulsar作为下一代消息中间件的典型代表,在设计和实现上面都具备很好的前瞻性,综合考量了业界现存的一些比较常用的、优秀的消息中间的架构设计、适用场景、运营中的问题等,如目前用...

QcloudCommunity的博客 754

发那科机器人karel程序

备份和查看发那科机器人中的 Karel 程序的过程主要包括从示教器中备份程序,并通过 RoboGuide 等仿真软件查看和运行程序。步骤相对简单,但需要确保你的设备和软件已经设置好,可以通过 FTP 或直接从示教器的外部存储设备进行操作。如果你在操作过程中遇到问题,建议查阅相关的用户手册或联系发那科的技术支持,确保设备设置正确。如果你有更具体的问题或需要进一步帮助,欢迎继续提问!希望如上措施及解决方案能够帮到有需要的你。

**My Coding Family** 1602

CTO 问我 Pulsar 到底能不能取代 Kafka

Pulsar作为新型的云原生分布式消息流平台,确实有很多优秀的设计理念。在Yahoo内部支持应用服务平台中 140 万个topic,日处理消息超过 1000 亿条。腾讯的分布式交易引擎 TDXA也使用了Pulsar,应用于腾讯的计费平台。[5]kafka目前的使用场景最多的还是日志大数据处理,对金融场景的应用比较少。但这并不能说明Pulsar可以取代Kafka,Kafka用户群体庞大,社区和资源完善,而且在2.8版本中去除了Zookeeper,部署非常容易。

Park33的博客 371

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

深度学习工具包 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")

​CTO问我Pulsar到底能不能取代Kafka

Pulsar源自Yahoo,于2016年开源并捐献给Apache基金会,并在2018年9月升级成为Apache顶级项目。Kafka最初由Linkedin开发,并于2010年贡献给了Apache基金会,之后成为Apache顶级项目。Kafka架构由broker和zookeeper组成,如下图:[1]注意:Kafka2.8版本可以不依赖Zookeeper独立运行了Pulsar的架构如下:Pulsar Broker会在本地缓存消息,并且支持TTL,从上面的2个架构我们看到,Kafka和Pulsar有3点不同:Ka

mxy_111的博客 234

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

上一篇: 学会这10种JAVA定时任务多种方式集锦,我有点飘了
下一篇: Kafka原理篇:图解kafka架构原理
普通网友
博客等级 码龄6年 3807粉丝 69原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值