Apache Pulsar学习笔记11: 使用分区Topic
2021-11-03
分区Topic的概念 #
前面在学习Topic的时候,已经了解了分区Topic的基本概念。在Pulsar中一个Topic只能由一个Broker提供服务,而单个Topic的吞吐量受限于为其提供服务的Broker的计算能力,这限制了Topic的最大吞吐量。
Pulsar通过分区Topic来提高吞吐量
,分区Topic在底层通过N个内部Topic实现,N就是分区的数量。
前面在学习Topic的时候,已经了解了分区Topic的基本概念。在Pulsar中一个Topic只能由一个Broker提供服务,而单个Topic的吞吐量受限于为其提供服务的Broker的计算能力,这限制了Topic的最大吞吐量。
Pulsar通过分区Topic来提高吞吐量
,分区Topic在底层通过N个内部Topic实现,N就是分区的数量。
本节将学习从channel中接收数据的内部实现。
在Go中从channel中接收数据有两种方式:
1v <- ch
2v, ok <- ch
使用v <- ch
从channel中接收数据时,会调用runtime.chanrecv1
,chanrecv1
调用了runtime.chanrecv
。
主流消息系统都会提供很多好用的特性支持各种业务场景,死信队列
, 延迟队列
这些词在使用这些消息系统时经常被提到。
Pulsar作为下一代云原生消息系统肯定也是支持这些特性的。Pulsar中没有队列的概念, 前面在学习使用Java和Go开发Pulsar的Consumer时,在创建Consumer时可以为其设置死信策略
,并指定死信Topic
。
本节将学习Pulsar中的延迟消息投递功能。
前面学习了channel的底层数据结构hchan以及hchan是如何被创建的。
使用类似ch <- 3
往channel中发送数据时,会调用runtime.chansend1
,chansend1
调用了chansend
,本节将主要学习runtime.chansend
这个函数。
channel是Go语言核心数据结构之一。Go提供了CSP(通信顺序进程Communicating sequential processes)的并发模型,关于Go并发的那句经典的谚语不要通过共享内存的方式进行通信,而是应该通过通信的方式共享内存
,goroutine之间的通信通过channel来完成。
本节将通过阅读源码(Go 1.17.2)了解Go语言中channel的数据结构,以及channel是如何被创建的。
前面学习了Pulsar的架构,在本地开发环境中使用Docker运行了单机的Pulsar,并学习使用plusar-admin
命令行工具管理集群、租户、命名空间和Topic,使用Java和Go开发Pulsar的Producer和Consumer,使用Pulsar Schema管理消息数据的类型安全。
本节将学习PulsarWeb图形管理工具Pulsar Manager,使用Pulsar Manager也可以监控和管理Pulsar集群、组合、命名空间和Topic。遵循渐进性学习原则,本节还是现在本地开发环境使用Docker容器运行Pulsar Manager,以后再完成在Kubernetes集群中部署生产就绪的Pulsar集群和Pulsar Manager。
在Linux系统中,一个程序进程在内存布局上遵循一定规律,进程的内存空间布局由高地址到低地址大致可分为以下几段:
ulimit -s
查看和调整,一般默认为8Mb,栈从高地址向低地址增长(函数调用)前面两节分别介绍了如何使用Pulsar Java客户端库和Go客户端库开发Producer、Consumer。 目前主流的消息中间件都不负责消息在从生产者到消费者上下游传递过程中的类型安全性,而由客户端自己负责消息的序列化和反序列操作来保障消息传递的类型安全。 Pulsar也支持这种客户端的方法,生产者将具体类型的消息对象序列化成字节数组发送到Topic,消费者从Topic接收字节数组并反序列化为具体类型的消息对象。 除了由客户端负责消息类型安全性的方法,Pulsar还提供了一种服务端的方法即Pulsar Schema,本节将学习如何使用Pulsar Schema管理消息数据的类型安全性。
...Delve是一个专门用于Go语言的调试器,之前整理过Delve的基本使用,使用Delve调试Go程序。
本文进一步介绍如何使用Delve阅读Go的源码并找到一些语法在Go的内部是如何实现的。这里将一下在Go里创建channel的语法为例make(chan int, 100)
,演示如何使用Delve如何找到make chan在Go内部的源码实现以及channel具体的数据结构是什么样的。
上一节学习了Pulsar中的生产者、消费者、订阅和订阅类型。
当一个消费者连接到Pulsar时,会创建一个订阅(Subscription),订阅有4种类型:独占模式、灾备模式、共享模式和基于key的共享模式。
订阅是命名好的配置规则,指导消息如何投递给消费者。生产者和消费者是连接到Pulsar的客户端,上节使用pulsar-client
连接到Pulsar集群完成了消费者和生产者的测试。
真实场景中的生产者和消费者是我们开发的程序,从本节开始将学习如何使用各种编程语言开发Pulsar的生产者和消费者。