网站开发找哪家,房产网站开发文档,visual studio怎么新建网站,网网站开发设计服务端处理架构
资料来源于网络 网络线程池#xff1a; 接受请求#xff0c;num.network.threads#xff0c;默认为 3#xff0c;专门处理客户的发送的请求。
IO 线程池#xff1a; num.io.threads#xff0c;默认为 8#xff0c;专门处理业务请求。也就是它不负责发…服务端处理架构
资料来源于网络 网络线程池 接受请求num.network.threads默认为 3专门处理客户的发送的请求。
IO 线程池 num.io.threads默认为 8专门处理业务请求。也就是它不负责发送响应发送响应还是由网络线程池处理。
当遇到性能瓶颈的时候可以适当的调整这两个参数
服务端消息存储文件布局
1 Topic 文件结构 Segment 文件结构 命名规则一个 segment 的名称其实是当前 segment 第一条消息的偏移量,也就是说一个segement如果写不下了就会生成新的segment。 查找机制
将所有的 segment 文件名进行生序排列然后找到偏移量最后落在哪个 segment 对象上采用二分因为文件名是有序的。继续从这个 segment 里面的 .index 文件找到消息的物理偏移量也就是对应图中的.index偏移量最后拿着物理偏移量去 .log 文件找到最终的实体消息非常的迅速。 删除机制 按照时间过期多少删默认7天、按照大小来删
服务端数据的一致性
其实也就是分区和副本之前的一致性。比如说我们P0有9条消息因为每个节点同步数据网络IO等原因所以导致R0 和 R3 之间的数据并不一致。 HW高水位消费者消费最高的位置其实也就是木桶原理所以只能到下面图中的第四条消息。 LEOlog写文件的最后一个位置。 ISR也就是一个分区和备份节点的队列。比如P0,R0,R3.
如果我们的备份节点挂掉了 1 首先它会从ISR中剔除当恢复正常的时候会向主分片获取 HW 高水位线与自己的 LEO 比对如果自己的 LEO 超过 HW 则干掉超过的部分小于的话就从主分片复制数据过来。 2 复制的时候如果复制之后的 LEO 与 HW 持平的话那么就会重新加入到 ISR 同步队列中
如果我们的主分区挂掉了 1 从ISR中剔除选择数据最多的数据为主分片。 2 活过来的时候发现已经有顶替的 leader 角色主分片了那么就跟随也就是向 leader 获取 HW 高水位线与自己的 LEO 比对大于 LEO 则删除小于 LEO 则从 leader 这边复制数据过去。 3 复制数据的进度如果赶上了主分片的 HW 的话那么就继续加入到 ISR 队列中。 但是我们主分片数据最多为什么要把后面的数据干掉呢这样不是会丢失消息吗 这样其实是保证了数据的一致性也就是保证分区和备份节点的都是同样的进度。 数据不丢失问题是由Producer来保证的也就是有重试机制如果没有发送成功的话就会从新发送但是消费者一侧一定要做幂等。