Blog

Apache Pulsar学习笔记15: 将Pulsar集群接入到监控系统

📅 2022-01-06

上一节,使用Pulsar官方的Helm Chart在Kubernetes集群中规划并部署了生产可用的Pulsar集群。

在上一节,我们还留了一个小尾巴,在部署Pulsar集群时,禁用了监控相关的组件(promethues, grafana等)。 在以Kubernetes为基础的云原生基础架构中,肯定已经单独部署了以Prometheus为核心的各个监控组件,因此我们希望使用平台统一的Prometheus实现对Pulsar集群的监控。

...

Apache Pulsar学习笔记14: 使用Helm在Kubernetes集群中部署Pulsar

📅 2021-12-31

时间过得比较久了,在开始今天的学习之前先回顾一下前面已经学习的13节的内容。

0.阶段复习 #

Pulsar是一个支持多租户的、高性能的、分布式的Pub-Sub消息系统。

  • 了解Pulsar的架构。Pulsar提供了一个比Cluster更高级别的抽象Instance。
    • 一个Pulsar Instance由多个Pulsar Cluster组成
    • 一个Instance中的Cluster之间可以相互跨地域复制数据
  • 单个Pulsar集群由以下部分组成:
    • Pulsar Proxy: 是无状态的,Proxy作为集群的智能路由层,是负责Pulsar客户端与Pulsar集群交互的统一网关
    • Pulsar Brokers: 也是无状态的,是集群的服务层,Proxy会将客户端的访问请求转发到正确的Broker上。Broker作为服务层与Pulsar的存储层进行交互
    • Bookies: 一个集群有多个Bookie节点(组成Bookeeper集群)负责消息的持久化存储
    • Zookeeper: 用于集群级别的配置和协调,并存储Pulsar集群的所有元数据
  • 以docker容器运行单机Pulsar
    • 学习使用命令行工具pulsar-admin创建tenant、namespace、topic
    • 了解Pulsar Admin REST API
  • tenant、namespace、topic的基本概念
    • Pulsar基于租户、命名空间、主题的逻辑层次结构支持多租户
    • 分区Topic的概念
    • Topic URL格式
    • 持久化Topic和非持久化Topic的概念
  • 生产者和消费者、订阅和订阅模式
    • Pulsar支持: exclusive(独占), failover(故障转移/灾备), shared(共享), key-shared(基于key的共享模式) 4中订阅模式
    • 使用命令行工具pulsar-client进行生产者和消费者测试
  • 使用Pulsar Java客户端库创建生产者、消费者、Reader
    • 消费者端可以使用"同步接收消息", “异步接收消息”, “MessageListener接收” 3种模式,其中MessageListener自带线程池
    • 创建消费者时可以设置消费者的批量接收策略
    • 多主题订阅: 设置单个消费者订阅多个主题
    • 消费异常处理可以使用"无限重试", “捕获并忽略异常”, “死信主题(Dead Letter Topic)“三种方式
    • 使用消息Reader可以由用户自己手动在Topic中定位,读取想要读取的消息
  • 使用Pulsar Go客户端库
    • 消费者端支持consumer.Receive()consumer.Chan()两种方式消费消息。前者对channel关闭和context cancel的情况做了封装,后者要我们自己处理和channel的交互,但也提供了最大的灵活性。
    • 多主题订阅
    • 死信策略和死信主题
    • 使用消息Reader
  • 使用Pulsar Schema管理消息数据的类型安全性
  • Web图形化管理工具Pulsar Manager
  • 延迟消息投递特性
    • 指定多长时间后投递deliverAfter
    • 指定在将来某个时间点投递deliverAt
  • 分区Topic和路由模式
  • 认证和授权
    • 开启JWT身份认证
    • 授权和权限管理

前面的学习一直是基于以docker容器启动的单机Pulsar。今天将学习使用Helm在Kubernetes集群中部署Pulsar集群。

...

使用kubeadm部署Kubernetes 1.23

📅 2021-12-22

kubeadm是Kubernetes官方提供的用于快速安部署Kubernetes集群的工具,伴随Kubernetes每个版本的发布都会同步更新,kubeadm会对集群配置方面的一些实践做调整,通过实验kubeadm可以学习到Kubernetes官方在集群配置上一些新的最佳实践。

...

Kubernetes Nginx Ingress Controller从0.x到1.x升级指南

📅 2021-11-24

最近把一套K8S集群的Nginx Ingress Controller从v0.33升级到了v1.0.5,属于主版本升级,在这里整理一下升级的过程和遇到的问题。 这套k8s集群的信息如下:

  • k8s版本为v1.21.5
  • 使用Ingress将集群外部http流量接入到集群内部,当前集群中共有三十多个Ingress资源
  • ingress controller使用的是https://github.com/kubernetes/ingress-nginx/,版本是v0.33,基于yaml文件格式的Manifest部署

升级前的准备工作 #

修改集群中的Ingress资源使其与1.x版本的Nginx Ingress Controller以及后续版本的k8s(>=1.22)兼容,修改主要涉及两个方面:

...

Go源码学习: 切片slice的内部数据结构

📅 2021-11-16

Go语言中的切片slice的底层数据结构是数组,这是即使是Go的初学者都了解的。 前面我们学习了string类型在运行时由reflect.StringHeader表示,StringHeader可以理解为string在运行时的"描述符",StringHeader由Data和Len两个字段组成,Data是指向string底层byte数组的指针,Len是string的长度。

...

Go源码学习: string的内部数据结构

📅 2021-11-15

前面在学习Go程序进程的内存布局时,分析了一个Go程序在Linux下ELF文件格式经过简化后大致如下图所示:

go-elf-fmt.png

Go二进制文件ELF主要有这几个section组成: .text, .rodata, .data, .noptrdata, .bss, .noptrbss.rodata中存放的是常量数据,程序中的字面量在编译时会被放到这个section中,那么字符串字面量也将放到这个section中。 在执行程序时,ELF文件被加载到内存中,相同权限的Section会被对应到一个Segment中,大致是下图的内存加载结构:

...

基于repmgr实现PostgreSQL的主备高可用

📅 2021-11-14

前面已经在两台CentOS 7服务器上从源码编译安装了PostgreSQL,当前这两台服务器的PostgreSQL数据库是相互独立,它们之间没有任何关系。 本文将介绍基于repmgr的postgresql主备高可用方案,使用repmgr将这两个PostgreSQL设置为一个基本的复制集群,其占用一个作为主服务(primary),另一个作为备用服务(standby)。

...

PostgreSQL的基础使用指南

📅 2021-11-13

1.连接到数据库 #

1#psql -h 服务器 -p 端口地址 -U 用户名 -d 数据库
2psql -h 127.0.0.1 -p 5432 -U <dbuser> -d <dbname>

连接到数据库,进入PostgreSQL提示符即(psql shell)后,可以使用\c dbname dbuser切换登录用户,使用SELECT current_user;查看当前连接使用的数据库用户。

...

从源码编译安装PostgreSQL 13.x

📅 2021-11-13

PostgreSQL是一个开源的对象-关系数据库系统,经过十多年的开发和改进,PostgreSQL已在可靠性、稳定性上已经十分强大,并且被应用的十分广泛。 很多云原生方向的产品例如开源镜像仓库Harbor、API网关Kong都使用了PostgreSQL。本文将介绍从源码编译安装PostgreSQL 13.5的具体过程。

...

Apache Pulsar学习笔记13: 授权和权限管理

📅 2021-11-06

上一节学习了如何为Pulsar开启基于JWT的身份认证。 Pulsar使用身份认证提供者(Authentication Provider)识别客户端,但如果只启用身份认证,那么只要客户端通过认证就可以访问集群中的所有资源,因此在启用身份认证的基础上,还必须为Pulsar开启授权以进行权限管理。 其实上一节在学习JWT身份认证时,已经开启了授权。本节将详细学习一下Pulsar的授权和权限管理。

...

© 2025 青蛙小白 | 总访问量 | 总访客数