<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[稷下学员的笔记博客]]></title><description><![CDATA[日常发布整理学习笔记]]></description><link>https://blog.youkuaiyun.com/eclipse9527</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; eclipse9527]]></copyright><item><title><![CDATA[并发编程ReentrantReadWriteLock 和 StampLock详解]]></title><link>https://blog.youkuaiyun.com/eclipse9527/article/details/131512218</link><guid>https://blog.youkuaiyun.com/eclipse9527/article/details/131512218</guid><author>eclipse9527</author><pubDate>Mon, 03 Jul 2023 11:24:48 +0800</pubDate><description><![CDATA[本章主要说明ReentrantReadWriteLock 读写锁及StampLock的逻辑及原理]]></description><category></category></item><item><title><![CDATA[CentOS 7 通过kubeadm单机安装Kubernetes与Dashboard]]></title><link>https://blog.youkuaiyun.com/eclipse9527/article/details/122876314</link><guid>https://blog.youkuaiyun.com/eclipse9527/article/details/122876314</guid><author>eclipse9527</author><pubDate>Mon, 14 Feb 2022 06:30:00 +0800</pubDate><description><![CDATA[文章目录1.  安装准备1.1 安装依赖1.2 安装docker1.3 系统基础设置2. 安装kubeadm  kubelet kubectl2.1 配置yum源2.2 安装kubeadm&amp;kubelet&amp;kubectl2.3 统一k8s和docker的cgroup2.4 启动并设置开机自启动kubelet2.5 kubeadm init初始化master2.6 查看Node状态3. 安装CNI网络插件4. 安装DashBoard4.1 安装dashboard4.2 修改资源4.3更改ser]]></description><category></category></item><item><title><![CDATA[Pulsar基础（七）—Topic常用操作]]></title><link>https://blog.youkuaiyun.com/eclipse9527/article/details/122818816</link><guid>https://blog.youkuaiyun.com/eclipse9527/article/details/122818816</guid><author>eclipse9527</author><pubDate>Thu, 10 Feb 2022 06:30:00 +0800</pubDate><description><![CDATA[topic基本操作
创建Topic
创建一个没有分区的Topic
bin/pulsar-admin topics create persistent://tenant/namespace/topic

创建一个有分区的Topic
bin/pulsar-admin topics create-partitioned-topic persistent://tenant/namespace/topic  --partitions 4


无论是有分区还是没有分区, 创建topic后,如果没有任何操作, 60s后p]]></description><category></category></item><item><title><![CDATA[pulsar基础（六）——namespace的基本操作]]></title><link>https://blog.youkuaiyun.com/eclipse9527/article/details/122818538</link><guid>https://blog.youkuaiyun.com/eclipse9527/article/details/122818538</guid><author>eclipse9527</author><pubDate>Wed, 09 Feb 2022 06:30:00 +0800</pubDate><description><![CDATA[文章目录namespace基本操作创建命名空间获取命名空间列表删除命名空间其它操作获取namespace相关的配置策略配置复制集群设置复制集群获取复制集群列表获取backlog quota策略移除quota策略配置持久化策略设置持久化策略获取持久化策略配置消息存活时间（TTL）设置存活时间获取存活时间删除存活时间配置Topic的消息发送速率设置Topic的消息发送的速率获取topic的消息发送速率配置Topic的消息接收速率设置Topic的消息接收的速率获取topic的消息接收速率配置复制集群设置Topic]]></description><category></category></item><item><title><![CDATA[pulsar基础（五）—多租户的操作]]></title><link>https://blog.youkuaiyun.com/eclipse9527/article/details/122706526</link><guid>https://blog.youkuaiyun.com/eclipse9527/article/details/122706526</guid><author>eclipse9527</author><pubDate>Thu, 27 Jan 2022 06:30:00 +0800</pubDate><description><![CDATA[多租户操作
获取租户列表
tenants list
cd /export/server/brokers/bin
./pulsar-admin tenants list

创建租户
在创建租户时，可以使用-r 或者 --admin-roles标志分配管理角色。可以用逗号分隔的列表指定多个角色
cd /export/server/brokers/bin

./pulsar-admin tenants create my-tenant

./pulsar-admin tenants create my-tenan]]></description><category></category></item><item><title><![CDATA[pulsar基础（四）—namespace 和topic介绍]]></title><link>https://blog.youkuaiyun.com/eclipse9527/article/details/122672362</link><guid>https://blog.youkuaiyun.com/eclipse9527/article/details/122672362</guid><author>eclipse9527</author><pubDate>Wed, 26 Jan 2022 06:30:00 +0800</pubDate><description><![CDATA[namespace 和topic介绍
什么是命名空间（名称空间）

namespace是Pulsar中最基本的管理单元，
可以在namespace中进行设置权限、调整副本设置，管理跨集群的消息复制，控制消息策略等关键操作。
一个主题topic可以继承其所对应的namespace的属性，因此我们只需对namespace的属性进行设置，就可以一次性设置该namespace中所有主题topic的属性。

namespace分类
namespace有本地namespace和全局namespace两种


本地nam]]></description><category></category></item><item><title><![CDATA[Pulsar基础（三）—多租户模式介绍]]></title><link>https://blog.youkuaiyun.com/eclipse9527/article/details/122671822</link><guid>https://blog.youkuaiyun.com/eclipse9527/article/details/122671822</guid><author>eclipse9527</author><pubDate>Tue, 25 Jan 2022 06:30:00 +0800</pubDate><description><![CDATA[多租户模式介绍
什么是多租户？

多租户是一种架构，目的是为了让多用户环境下使用同一套程序，且保证用户间数据隔离
简单讲：在一台服务器上运行单个应用实例，它为多个租户（客户）提供服务。
多租户这一特性，使得各个部门之间可以共享同一份数据，不用单独部署独立的系统来操作数据，很好的保证了各部门间数据一致性的问题，同时简化维护成本。

Pulsar 的多租户设计符合以下要求：

使用身份验证、授权和 ACL（访问控制列表）确保其安全性
为每个租户强制执行存储配额
支持在运行时更改隔离机制，从而实现操作成本低和管理]]></description><category></category></item><item><title><![CDATA[Pulsar基础（二）——Pulsar组件介绍]]></title><link>https://blog.youkuaiyun.com/eclipse9527/article/details/122650280</link><guid>https://blog.youkuaiyun.com/eclipse9527/article/details/122650280</guid><author>eclipse9527</author><pubDate>Mon, 24 Jan 2022 21:45:00 +0800</pubDate><description><![CDATA[Pulsar 组件
Broker
broker是一个无状态组件, 主要负责运行另外的两个组件:

一个HTTP服务器，它暴露了REST系统管理接口以在生产者和消费者之间进行Topic查找的API
一个调度分发器，它是异步的TCP服务器，通过自定义二进制协议应用于所有相关的数据传输

​    出于性能考虑，消息通常从Managed Ledger缓存中分派出去，除非积压超过缓存大小。如果积压的消息对于缓存来说太大了, 则Broker将开始从BookKeeper那里读取Entries（Entry同样是BookK]]></description><category></category></item><item><title><![CDATA[Pulsar基础（一）——Pulsar介绍]]></title><link>https://blog.youkuaiyun.com/eclipse9527/article/details/122645774</link><guid>https://blog.youkuaiyun.com/eclipse9527/article/details/122645774</guid><author>eclipse9527</author><pubDate>Sun, 23 Jan 2022 06:00:00 +0800</pubDate><description><![CDATA[Pulsar介绍
Apache Pulsar 是一个云原生企业级的发布订阅（pub-sub）消息系统，于2016年开源，Apache软件基金会顶级开源项目。Pulsar在Yahoo的生产环境运行了三年多，助力Yahoo的主要应用，如Yahoo Mail、 Yahoo Finance、Yahoo Sports、Flickr、Gemini广告平台和Yahoo分布式键值存储系统Sherpa
Pulsar的功能与特性
多租户模式（Multi-tenancy）


Pulsar能为特定的租户预留合适的存储空间、应用授]]></description><category></category></item><item><title><![CDATA[关于Zookeeper权限的一些坑]]></title><link>https://blog.youkuaiyun.com/eclipse9527/article/details/122586044</link><guid>https://blog.youkuaiyun.com/eclipse9527/article/details/122586044</guid><author>eclipse9527</author><pubDate>Thu, 20 Jan 2022 06:30:00 +0800</pubDate><description><![CDATA[由于业务需求，需要给Zookeeper去配置一个权限，什么类型都可以。查阅技术文档后，选择了可以通过配置文件配置的SASL模型。auth、digest都无法通过配置文件去配置用户名和密码。然而在写Java连接代码时，遇到了问题
问题
在Java代码中，通常使用addAuthInfo（schema,auth）来给连接添加权限，digest、auth都是通过该方法添加权限，而在尝试之后，发现无论如何都没法通过addAuthInfo(schema,auth)通过SASL认证。
原因
在查阅官方文档后，发现：若使用]]></description><category></category></item><item><title><![CDATA[Kubernetes通过一行shell命令给pod中的zk节点添加权限]]></title><link>https://blog.youkuaiyun.com/eclipse9527/article/details/122584862</link><guid>https://blog.youkuaiyun.com/eclipse9527/article/details/122584862</guid><author>eclipse9527</author><pubDate>Wed, 19 Jan 2022 17:02:06 +0800</pubDate><description><![CDATA[问题
一个需求：需要写一个shell脚本部署Zookeeper，并且在脚本里需要去对zk的 /节点进行digest权限配置。
尝试了以下命令：
kubectl exec -ti podName -n namespace -- /bin/sh&amp;&amp;zkCli.sh&amp;&amp;setAcl digest:username:password

发现执行后只执行了zkCli.sh命令，后面的setAcl命令并未执行。
后来猜测，执行的命令需要在pod中可以识别才会执行，因此无法通过该命令直接执]]></description><category></category></item><item><title><![CDATA[Go语言基础（五）——指针]]></title><link>https://blog.youkuaiyun.com/eclipse9527/article/details/122547900</link><guid>https://blog.youkuaiyun.com/eclipse9527/article/details/122547900</guid><author>eclipse9527</author><pubDate>Tue, 18 Jan 2022 06:30:00 +0800</pubDate><description><![CDATA[指针
指针的值是存储变量的 地址。一个指针指示值所在的位置。不是所有的值都有地址，但是所有的变量一定都有。
指针可以在不知道变量名的情况下，间接读取或更新变量的值。
获取值的地址

通过 &amp; 符号可以获取变量的地址，*号获取指针指向地址所对应的值。

	x := 1
	p := &amp;x
	fmt.Println(p)
	fmt.Println(*p)

输出：
0xc0000a4058


指针可以继续通过&amp;来获取指针所对应的地址

	x := 1
	p := &amp;x
	fmt.]]></description><category></category></item><item><title><![CDATA[Go语言基础（四）—String与其他基本数据类型的转换]]></title><link>https://blog.youkuaiyun.com/eclipse9527/article/details/122516100</link><guid>https://blog.youkuaiyun.com/eclipse9527/article/details/122516100</guid><author>eclipse9527</author><pubDate>Mon, 17 Jan 2022 06:30:00 +0800</pubDate><description><![CDATA[Go语言中，不同类型的变量之间不能自动转换，需要显式转换，这与Java和C都有区别
var i int32 =100
var n1 float32 = float(i) //将int32转换为float32

注意：若将int64转换成int8，编译时不会报错，但是结果按照溢出处理，所以转换需要考虑范围。
func main() {
	var in64 int64 = 1651235425
	var in8 int8 = int8(in64)
	fmt.Println("in64=", in64, "in8]]></description><category></category></item><item><title><![CDATA[Go 语言基础（三）——基本数据类型]]></title><link>https://blog.youkuaiyun.com/eclipse9527/article/details/122487600</link><guid>https://blog.youkuaiyun.com/eclipse9527/article/details/122487600</guid><author>eclipse9527</author><pubDate>Sun, 16 Jan 2022 08:00:00 +0800</pubDate><description><![CDATA[数据类型
基本数据类型
数值型
整数类型：int、int8 、int16、int 32 、int64、uint、uint8、uint16、uint32 、uint64

int unint的大小与系统有关，默认声明int
Go在使用时遵保小不保大，尽量使用占用空间小的数据类型
查看占用空间用unsafe.Sizeof()

浮点类型：float32、float64
字符型
byte
布尔型
bool
字符串型
String

Java 等其他语言归于引用数据类型，不属于基本数据类型，注意区分

复杂数据类型]]></description><category></category></item><item><title><![CDATA[Go语言（二）—基本概述]]></title><link>https://blog.youkuaiyun.com/eclipse9527/article/details/122484053</link><guid>https://blog.youkuaiyun.com/eclipse9527/article/details/122484053</guid><author>eclipse9527</author><pubDate>Sat, 15 Jan 2022 06:30:00 +0800</pubDate><description><![CDATA[变量概述
变量是程序中数据的标识，通过变量，我们可以找到一个唯一的数据。
变量的使用

变量的声明（定义变量）
非变量赋值
使用变量


若定义变量但并未使用，则会报错：unused variable

Go 语言变量的声明
指定变量类型
var i int
fmt.Println(i)

这种定义方法下，变量的默认值为对应初始值
根据值自行判断变量类型（类型推导）
var num = 10.00

省略var
name := "tom"
fmt.Println("name=",name)

多变量声明
局]]></description><category></category></item><item><title><![CDATA[Go语言基础（一）——HelloWorld]]></title><link>https://blog.youkuaiyun.com/eclipse9527/article/details/122484076</link><guid>https://blog.youkuaiyun.com/eclipse9527/article/details/122484076</guid><author>eclipse9527</author><pubDate>Fri, 14 Jan 2022 06:30:00 +0800</pubDate><description><![CDATA[文章目录hello worldgo的运行区别：
hello world
package main //包名
import "fmt" //导入fmt库

func main(){
    fmt.Println("hello world")
}

由HelloWorld引出的go语言特性：


Package

每个文件夹内仅能有一个package名，但是该名可以与文件夹名不同
每个应用程序应该有一个main package



fmt

包含了标准输入输出的函数



func main

若未定义in]]></description><category></category></item><item><title><![CDATA[shell(一)——概述、变量、运算符]]></title><link>https://blog.youkuaiyun.com/eclipse9527/article/details/122458908</link><guid>https://blog.youkuaiyun.com/eclipse9527/article/details/122458908</guid><author>eclipse9527</author><pubDate>Thu, 13 Jan 2022 06:30:00 +0800</pubDate><description><![CDATA[文章目录shell概述shell解析器Linux提供的shell解析器：shell脚本入门脚本格式helloworld脚本的执行shell中的变量系统变量常用系统变量自定义变量基本语法变量定义规则特殊变量$n∗和*  和∗和@$？运算符基本语法：
shell概述
shell是一个命令行解释器，它接收应用程序/用户的指令，调用操作系统内核
shell还是一个功能强大的编程语言，易编写，易调试，灵活性强
shell解析器
Linux提供的shell解析器：

/etc/shells/bin/sh
/etc/sh]]></description><category></category></item><item><title><![CDATA[RocketMQ(十三)——实战-普通消息的发送与消费]]></title><link>https://blog.youkuaiyun.com/eclipse9527/article/details/122438774</link><guid>https://blog.youkuaiyun.com/eclipse9527/article/details/122438774</guid><author>eclipse9527</author><pubDate>Wed, 12 Jan 2022 06:30:00 +0800</pubDate><description><![CDATA[文章目录普通消息消息发送同步发送消息异步发送消息单向发送消息代码示例导入RocketMQ的依赖定义同步消息的发送者定义异步消息的发送者定义消费者
普通消息
消息发送
同步发送消息
同步发送消息是指：Producer发出一条消息后，会在收到MQ返回的ACK后才发送下一条消息。该方式的消息可靠性最高，但是消息发送效率太低。

异步发送消息
异步发送消息是指：Producer发出消息后无须等待MQ返回ACK，直接发送下一条消息。该方式有一定可靠性，发送效率相对同步较高

单向发送消息
单向发送消息是指：Produ]]></description><category></category></item><item><title><![CDATA[RocketMQ（十二）消息堆积与消费延迟]]></title><link>https://blog.youkuaiyun.com/eclipse9527/article/details/122347530</link><guid>https://blog.youkuaiyun.com/eclipse9527/article/details/122347530</guid><author>eclipse9527</author><pubDate>Tue, 11 Jan 2022 06:30:00 +0800</pubDate><description><![CDATA[RocketMQ（十二）消息堆积与消费延迟
产生背景
消息处理流程中，如果Consumer的消费速度跟不上Producer的发送速度，MQ中未处理的消息会越来越多，这部分消息就被称为 堆积消息。消息出现堆积会导致消费延迟，以下场景需要重点关注消息堆积和消息延迟的问题。

业务系统上下游能力不匹配造成的持续堆积，且无法自行恢复
业务系统对消息的消费实时性要求较高，即使是短暂的堆积造成的消费延迟也无法接受。


Consumer使用长轮询Pull模式消费消息时，分为以下两个阶段：
消息拉取
Consumer通过]]></description><category></category></item><item><title><![CDATA[RocketMQ（十一）——消费的幂等性]]></title><link>https://blog.youkuaiyun.com/eclipse9527/article/details/122345127</link><guid>https://blog.youkuaiyun.com/eclipse9527/article/details/122345127</guid><author>eclipse9527</author><pubDate>Mon, 10 Jan 2022 06:30:00 +0800</pubDate><description><![CDATA[消费幂等
定义
当出现消费者对某条消息重复消费的情况时，重复消费的结果与消费一次的结果是相同的，并且多次消费并未对业务系统产生任何负面影响，那么这个消费过程就是消费幂等的

幂等：若某操作执行多次与执行一次对系统产生的影响是相同的，则称该操作是幂等的。

在互联网应用中，尤其在网络不稳定的情况下，消息很有可能会出现重复发送或重复消费。如果重复的消息可能会影响业务处理，那么就应该对消息做幂等处理。
常见消息重复的几种情况
发送消息时重复
当一条消息已被成功发送到Broker并完成持久化，此时出现了网络波动，从]]></description><category></category></item></channel></rss>