分区Topic的概念 前面在学习Topic的时候,已经了解了分区Topic的基本概念。在Pulsar中一个Topic只能由一个Broker提供服务,而单个Topic的吞吐量受限于为其提供服务的Broker的计算能力,这限制了Topic的最大吞……
阅读全文
本节将学习从channel中接收数据的内部实现。 在Go中从channel中接收数据有两种方式: 1v <- ch 2v, ok <- ch 使用v <- ch从channel中接收数据时,会调用runtime.chanrecv1,chanrecv1调用了runtime.chan……
阅读全文
主流消息系统都会提供很多好用的特性支持各种业务场景,死信队列, 延迟队列这些词在使用这些消息系统时经常被提到。 Pulsar作为下一代云原生消息系统肯定也是支持这些特性的。Pulsar中没有队列的概念, 前面在学习使用Java和Go开发Pulsa……
阅读全文
前面学习了channel的底层数据结构hchan以及hchan是如何被创建的。 使用类似ch <- 3往channel中发送数据时,会调用runtime.chansend1,chansend1调用了chansend,本节将主要学习runtime.c……
阅读全文
channel是Go语言核心数据结构之一。Go提供了CSP(通信顺序进程Communicating sequential processes)的并发模型,关于Go并发的那句经典的谚语不要通过共享内存的方式进行通信,而是应该通过通信的方式共享内存,goroutin……
阅读全文
前面学习了Pulsar的架构,在本地开发环境中使用Docker运行了单机的Pulsar,并学习使用plusar-admin命令行工具管理集群、租户、命名空间和Topic,使用Java和Go开发Pulsar的Producer和Consumer……
阅读全文
Linux进程内存分布简介 在Linux系统中,一个程序进程在内存布局上遵循一定规律,进程的内存空间布局由高地址到低地址大致可分为以下几段: 栈(stack): 用户态的栈,栈的大小是固定的,其大小可以使用ulimit -s查看和调整,一般默认为8……
阅读全文
前面两节分别介绍了如何使用Pulsar Java客户端库和Go客户端库开发Producer、Consumer。 目前主流的消息中间件都不负责消息在从生产者到消费者上下游传递过程中的类型安全性,而由客户端自己负责消息的序列化和反序列操作来保障消息……
阅读全文
Delve是一个专门用于Go语言的调试器,之前整理过Delve的基本使用,使用Delve调试Go程序。 本文进一步介绍如何使用Delve阅读Go的源码并找到一些语法在Go的内部是如何实现的。这里将一下在Go里创建channel的语法为例mak……
阅读全文
上一节学习了Pulsar中的生产者、消费者、订阅和订阅类型。 当一个消费者连接到Pulsar时,会创建一个订阅(Subscription),订阅有4种类型:独占模式、灾备模式、共享模式和基于key的共享模式。 订阅是命名好的配置规则,指导消息如……
阅读全文