04 2022 档案

摘要:zset实现是由ziplist(数据量小),和skiplist(跳表)实现。 有序集合使用 ziplist 格式存储必须满足以下两个条件: 有序集合保存的元素个数要小于 128 个; 有序集合保存的所有元素成员的长度都必须小于 64 字节。 可以通过配置文件中的 zset-max-ziplist-e 阅读全文
posted @ 2022-04-23 10:57 klm-kain 阅读(595) 评论(0) 推荐(0) 编辑
摘要:所有元素都为整数时,集合会以 intset 结构进行(数据)存储。 当发生以下两种情况时,会导致集合类型使用 hashtable 而非 intset 存储: 1)当元素的个数超过一定数量时,默认是 512 个,该值可通过命令 set-max-intset-entries xxx 来配置。 2)当元素 阅读全文
posted @ 2022-04-22 00:47 klm-kain 阅读(364) 评论(0) 推荐(0) 编辑
摘要:其中的字段含义如下: zlbytes:压缩列表字节长度,占 4 字节; zltail:压缩列表尾元素相对于起始元素地址的偏移量,占 4 字节; zllen:压缩列表的元素个数; entryX:压缩列表存储的所有元素,可以是字节数组或者是整数; zlend:压缩列表的结尾,占 1 字节。 添加流程 列 阅读全文
posted @ 2022-04-21 23:51 klm-kain 阅读(120) 评论(0) 推荐(0) 编辑
摘要:结构图: 可见实现为数组+链表 发生哈希冲突时才会使用链表的结构来存储数据 链表节点结构 typedef struct dictEntry { // dict.h void *key; union { void *val; uint64_t u64; int64_t s64; double d; } 阅读全文
posted @ 2022-04-21 23:18 klm-kain 阅读(155) 评论(0) 推荐(0) 编辑
摘要:redis 3.2前sds结构 struct sds{ int len; // 已占用的字节数 int free; // 剩余可以字节数 char buf[]; // 存储字符串的数据空间 } 3.2后,这样就可以针对不同长度的字符串申请相应的存储类型,从而有效的节约了内存使用。 typedef c 阅读全文
posted @ 2022-04-20 23:01 klm-kain 阅读(78) 评论(0) 推荐(0) 编辑
摘要:Redis有三种持久化方式: 快照方式(RDB, Redis DataBase)将某一个时刻的内存数据,以二进制的方式写入磁盘; 文件追加方式(AOF, Append Only File),记录所有的操作命令,并以文本的形式追加到文件中; 混合持久化方式,Redis 4.0 之后新增的方式,混合持久 阅读全文
posted @ 2022-04-18 23:14 klm-kain 阅读(84) 评论(0) 推荐(0) 编辑
摘要:socket 小知识:每个 socket 被创建后,会分配两个缓冲区,输入缓冲区和输出缓冲区。 写入函数并不会立即向网络中传输数据,而是先将数据写入缓冲区中,再由 TCP 协议将数据从缓冲区发送到目标机器。一旦将数据写入到缓冲区,函数就可以成功返回,不管它们有没有到达目标机器,也不管它们何时被发送到 阅读全文
posted @ 2022-04-18 22:37 klm-kain 阅读(41) 评论(0) 推荐(0) 编辑
摘要:Kakfa消费滞后程度有个专门的名称:消费者 Lag 或 Consumer Lag。所谓滞后程度,就是指消费者当前落后于生产者的程度。 比方说,Kafka 生产者向某主题成功生产了 100 万条消息,你的消费者当前消费了 80 万条消息,那么我们就说你的消费者滞后了 20 万条消息,即 Lag 等于 阅读全文
posted @ 2022-04-16 20:51 klm-kain 阅读(2642) 评论(0) 推荐(0) 编辑
摘要:Kafka consumer是单线程的设计,这个其实不准确,从 Kafka 0.10.1.0 版本开始,KafkaConsumer 就变为了双线程的设计,即用户主线程和心跳线程。 所谓用户主线程,就是你启动 Consumer 应用程序 main 方法的那个线程,而新引入的心跳线程(Heartbeat 阅读全文
posted @ 2022-04-16 20:29 klm-kain 阅读(761) 评论(0) 推荐(0) 编辑
摘要:从用户的角度来说,位移提交分为自动提交和手动提交;从 Consumer 端的角度来说,位移提交分为同步提交和异步提交。 1.开启自动提交位移的方法,Consumer 端有个参数 enable.auto.commit,把它设置为 true 或者压根不设置它就可以了,默认是true。 启用了自动提交,C 阅读全文
posted @ 2022-04-16 15:36 klm-kain 阅读(158) 评论(0) 推荐(0) 编辑
摘要:Rebalance 本质上是一种协议,规定了一个 Consumer Group 下的所有 Consumer 如何达成一致,来分配订阅 Topic 的每个分区。 在 Rebalance 过程中,所有 Consumer 实例都会停止消费,等待 Rebalance 完成。 Rebalance 的弊端: 1 阅读全文
posted @ 2022-04-16 14:44 klm-kain 阅读(2844) 评论(0) 推荐(0) 编辑
摘要:Consumer Group 是 Kafka 提供的可扩展且具有容错性的消费者机制。 Consumer Group 下可以有一个或多个 Consumer 实例。这里的实例可以是一个单独的进程,也可以是同一进程下的线程。在实际场景中,使用进程更为常见一些。 Group ID 是一个字符串,在一个 Ka 阅读全文
posted @ 2022-04-11 21:37 klm-kain 阅读(715) 评论(0) 推荐(0) 编辑
摘要:消息交付可靠性保障,是指 Kafka 对 Producer 和 Consumer 要处理的消息提供什么样的承诺。常见的承诺有以下三种: 最多一次(at most once):消息可能会丢失,但绝不会被重复发送。 至少一次(at least once):消息不会丢失,但有可能被重复发送。 精确一次(e 阅读全文
posted @ 2022-04-11 21:14 klm-kain 阅读(175) 评论(0) 推荐(0) 编辑
摘要:Producer: 1.什么时候创建TCP连接? 在创建 KafkaProducer 实例时,生产者应用会在后台创建并启动一个名为 Sender 的线程,该 Sender 线程开始运行时首先会创建与 Broker 的连接。 而且由于没调用send,其实不知道给哪个broker发送,所以是连接 boo 阅读全文
posted @ 2022-04-11 20:58 klm-kain 阅读(1036) 评论(0) 推荐(1) 编辑
摘要:Kafka 只对“已提交”的消息(committed message)做有限度的持久化保证 已提交,commit,若干个(可用配置设置) Broker 成功地接收到一条消息并写入到日志文件后,它们会告诉生产者程序这条消息已成功提交。 有限度,假如你的消息保存在 N 个 Kafka Broker 上, 阅读全文
posted @ 2022-04-10 01:34 klm-kain 阅读(63) 评论(0) 推荐(0) 编辑
摘要:一、Kafka消息 Kafka消息分为两层:消息集合(message set)以及消息(message) 一个消息集合中包含若干条日志项(record item),而日志项才是真正封装消息的地方。Kafka 底层的消息日志由一系列消息集合日志项组成。Kafka 通常不会直接操作具体的一条条消息,它总 阅读全文
posted @ 2022-04-10 01:25 klm-kain 阅读(96) 评论(0) 推荐(0) 编辑
摘要:以下都是最好显示设置的参数: 1.log.dirs = /home/kafka1,/home/kafka2,/home/kafka3 指定了 Broker 需要使用的若干个文件目录路径。(还有一个log.dir参数用于补充log.dirs的单个路径配置,但基本不用,配置log.dirs即可) 多路径 阅读全文
posted @ 2022-04-10 01:09 klm-kain 阅读(801) 评论(0) 推荐(0) 编辑
摘要:一、存储空间计算 假设公司有个业务每天需要向 Kafka 集群发送 1 亿条消息,每条消息保存两份以防止数据丢失,另外消息默认保存两周时间。现在假设消息的平均大小是 1KB,那么 Kafka 集群需要为这个业务预留多少磁盘空间? 每天 1 亿条 1KB 大小的消息,保存两份且留存两周的时间,那么总的 阅读全文
posted @ 2022-04-09 20:01 klm-kain 阅读(1142) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示