求阙厅

春有百花秋有月,夏有凉风冬有雪。若无闲事挂心头,便是人间好时节。

分布式 系列 Raft协议

Raft 是一个共识算法(consensus algorithm)。Raft 是工程上使用较为广泛的强一致性、去中心化、高可用的分布式协议。 Raft 算法是基于复制状态机模型推导的。复制状态机 Raft 算法包括三个子问题: 领袖选举: Leader 故障后集群能快速选出新 Leader 日志复制: 集群只有 Leader 能写入日志, Leader 负责复制日志到...

分布式 系列 复制状态机

当同一份数据存在多个副本的时候,怎么管理它们就成了问题。复制状态机用于支持那些允许数据修改的场景,比如分布式系统中的元数据。典型的例子是一个目录下的那些文件,虽然文件本身可以做到一次写入永不修改,但是目录的内容总是随文件的不断写人而发生动态变化的。 复制状态机的基本思想是一个分布式的复制状态机系统由多个复制单元组成,每个复制单元均是一个状态机,它的状态保存在一组状态变量中。状态机的状态能够...

Kafka 系列 消费者(Java)

深入理解Kafka

本文主要介绍目前流行的新消费者(Java 语言编写的)客户端。 一个正常的消费逻辑需要具备以下几个步骤: 配置消费者客户端参数及创建相应的消费者实例。 订阅主题。 拉取消息并消费。 提交消费位移。 关闭消费者实例。 订阅主题 Kafka 同一个消费组可以同时订阅多个主题。 拉取消息 Kafka 中的消费是基于拉模式的。消息的消费一般有两种模式:推模式和拉模...

Kafka 系列 时间轮

深入理解Kafka

Kafka 中存在大量的延时操作,比如延时生产、延时拉取和延时删除等。Kafka 基于时间轮的概念自定义实现了一个用于延时功能的定时器(SystemTimer) Kafka 并没有使用 JDK 自带的 Timer 或 DelayQueue 来实现延时的功能。JDK 中 Timer 和 DelayQueue 的插入和删除操作的平均时间复杂度为 O(nlogn)并不能满足 Kafka 的...

Kafka 系列 延时任务

深入理解Kafka

在Kafka中有多种延时操作,比如延时生产(DelayedProduce)、延时拉取(DelayedFetch)、延时数据删除(DelayedDeleteRecords)等。延时操作需要延时返回响应的结果,首先它必须有一个超时时间(delayMs),如果在这个超时时间内没有完成既定的任务,那么就需要强制完成以返回响应结果给客户端。其次,延时操作不同于定时操作,定时操作是指在特定时间之后执行的...

Kafka 系列 可靠性

深入理解Kafka

Kafka 多副本之间如何进行数据同步,尤其是在发生异常时候的处理机制又是什么?多副本间的数据一致性如何解决,基于的一致性协议又是什么?如何确保Kafka 的可靠性? Kafka 中的可靠性和可用性之间的关系又如何? 副本 副本(Replica)是分布式系统中常见的概念之一,指的是分布式系统对数据和服务提供的一种冗余方式。在常见的分布式系统中,为了对外提供可用的服务,我们往往会对数据和服...

IO 系列 零拷贝

解析 IO...

在 OS 层面上的零拷贝通常指避免在用户态(User-space) 与内核态(Kernel-space) 之间来回拷贝数据。严格意义上的零拷贝是指将数据直接从磁盘文件复制到网卡设备中,而不需要经由应用程序之手。 零拷贝技术: mmap sendfile 相关概念 DMA(Direct Memory Access,直接存储器访问) :DMA 传输将数据从一个地址空间复制...

MQ 系列 消息模型

消息中间件基本模型

对于消息中间件而言,一般有两种消息投递模式:点对点(P2P, Point-to-Point)模式和发布/订阅( Pub/Sub )模式。 点对点模式 点对点模式是基于队列的,消息生产者发送消息到队列,消息消费者从队列中接收消息。 订阅与发布 发布订阅模式定义了如何向一个内容节点发布和订阅消息,这个内容节点称为主题( Topic ),主题可以认为是消息传递的中介,消息发布者将消息发布到...

Kafka 系列 生产者(Java)

深入理解Kafka

从编程的角度而言,生产者就是负责向Kafka 发送消息的应用程序。本文主要介绍 从 Kafka 0.9.x 版本开始推出的使用 Java 语言编写的客户端。 生产者架构 整个生产者客户端由两个线程协调运行,这两个线程分别为主线程和 Sender 线程(发送线程)。在主线程中由 KafkaProducer 创建消息,然后通过可能的拦截器、序列化器和分区器的作用之后缓存到消息累加器(Re...

MySQL 系列 常见问题

尽可能全面的覆盖 MySQL 涉及的内容

索引 添加索引时需要考虑的因素? 不是在所有的查询条件中出现的列都需要添加索引。在表中数据具有高选择性时,B+树索引才有意义(高选择性,使用show index命令结果中的 cardinality 列,表示索引中不重复记录数量的预估值); 关注多张表之间的联接操作,关联的键需要加索引 在 OLAP 应用中,通常需要对时间字段进行索引,因为大多数统计需要根据时间维度进行数据的...