- 博客(16)
- 收藏
- 关注
原创 一致性hash算法 - consistent hashing
consistent hashing 算法早在 1997 年就在论文 Consistent hashing and random trees 中被提出,目前在cache 系统中应用越来越广泛; 1 基本场景 比如你有 N 个 cache 服务器(后面简称 cache ),那么如何将一个对象 object 映射到 N 个 cache 上呢,你很可能会采用类似下面的通用方法计算 object...
2017-02-10 13:18:18 215
原创 JVM内存模型及垃圾回收算法
JVM内存模型总体架构图 程序计数器多线程时,当线程数超过CPU数量或CPU内核数量,线程之间就要根据时间片轮询抢夺CPU时间资源。因此每个线程有要有一个独立的程序计数器,记录下一条要运行的指令。线程私有的内存区域。如果执行的是JAVA方法,计数器记录正在执行的java字节码地址,如果执行的是native方法,则计数器为空。虚拟机栈线程私有的,与线程在同一时间创建。管理JAVA方法执行的...
2017-02-09 17:52:01 96
原创 JVM内存模型
JVM定义了若干个程序执行期间使用的数据区域。这个区域里的一些数据在JVM启动的时候创建,在JVM退出的时候销毁。而其他的数据依赖于每一个线程,在线程创建时创建,在线程退出时销毁。 程序计数器 程序计数器是一块较小的内存空间,可以看作是当前线程所执行的字节码的行号指示器。分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖这个计数器来完成。 由于Java 虚拟机的多线程是...
2017-02-09 17:51:30 86
原创 Kafka Offset Storage
1.概述 目前,Kafka 官网最新版[0.10.1.1],已默认将消费的 offset 迁入到了 Kafka 一个名为 __consumer_offsets 的Topic中。其实,早在 0.8.2.2 版本,已支持存入消费的 offset 到Topic中,只是那时候默认是将消费的 offset 存放在 Zookeeper 集群中。那现在,官方默认将消费的offset存储在 Kafka 的...
2017-02-09 10:44:20 102
原创 如何在Kafka中修改Topic的preferred replica
操作背景 假如topic test.example中partition 0的replicas为[0,4],则0为preferred replica,应该成为leader。 这时我们期望4为preferred replica,并变成leader。 执行步骤如下: 1.查看当前的topic详细信息: lizhitao@users-MacBook-Pro-2:~$ ./bin/kafka-t...
2017-02-07 13:40:25 383 1
原创 Apache Kafka中Follower如何与Leader同步数据
重要名词解释: log end offset (logEndOffset),表示log中最后的message的offst位置.high watermark (HW),表示Partition各个replicas数据间同步且一致的offset位置,即表示allreplicas已经commit位置,每个Broker缓存中维护此信息,并不断更新。 Kafka中replication复...
2017-02-07 13:40:15 2292
原创 mafka平台架构
什么Mafka Mafka一个基于Kafka开发的一个分布式消息中间件综合解决方案。 Mafka架构 mafka平台里面有四个角色,这四个角色是通过zk进行协调的。 mafka-client:负责发送和接受消息。 mafka-manager:对集群和client状态管理。 mafka-monitor:用于监控和报警。 mafka集群:由多个broker组成的...
2017-02-06 10:22:31 418
原创 Kafka Producer机制优化-提高发送消息可靠性
名称解释: Broker:负责消息的存储和转发,也可以叫消息中介节点 Topic:每种消息的分类叫做主题(Topic)。 Partition:每一个Topic被切分为多个Partitions。 背景 Producer构造Message对象时,传入key参数,当Producer发送Message,会根据key确定目标Partition,当Kafka集群中某个Partition所有存活的节...
2017-02-06 10:22:19 125
原创 Kafka Broker HA机制
从图中我们可以看出HA的缓存分为生产缓存事件池和拉取缓存事件池两块结构相同的缓存区,分别缓存生产和拉取请求 2个缓存事件池的作用: 生产缓存事件池:当生产者设置了等待从partition的同步选项(requiredAcks为-1)时才会启动生产缓存。因为每一批生产的消息,需要等待所有的处于同步状态的从partition(in-sync)同步成功,在所有follow partition上报自...
2017-02-06 10:22:08 80
原创 Kafka数据可靠性与一致性解析
1.Partition Recovery机制 每个Partition会在磁盘记录一个RecoveryPoint, 记录已经flush到磁盘的最大offset。当broker fail 重启时,会进行loadLogs。 首先会读取该Partition的RecoveryPoint,找到包含RecoveryPoint的segment及以后的segment, 这些segment就是可能没有 完全fl...
2017-02-06 10:21:56 121
原创 Kafka Consumer机制优化-保证每条消息至少消费一次
背景 Kafka中由Consumer维护消费状态,当Consumer消费消息时,支持2种模式commit消费状态,分别为立即commit和周期commit。前者会导致性能低下,做到消息投递恰好一次,但很少使用,后者性能高,通常用于实际应用,但极端条件下无法保证消息不丢失。 目标 在有效期内,保证每条消息至少可被消费一次 问题分析 请看如上图1,Consumer Thread读取一...
2017-02-06 10:17:47 1010
原创 Consumer rebalance失败问题定位和解决思路
背景 最近在公司使用Kafka的Consumer高级API出现一些问题,问题描述如下: 大象push推送队列,在(大约每天8点到10点间)发送消息高峰期,消费节点负载处于高位、jvm内存占用大于%80。这时候JVM会频繁持续FullGC而卡住异步线程(stop the world),心跳等异步线程就没法正常收发数据包。这种情况下导致zk会话过期触发Consumer rebalance,zk会...
2017-02-05 18:10:10 1142
原创 消息队列中点对点与发布订阅区别
背景知识 JMS一个在 Java标准化组织(JCP)内开发的标准(代号JSR 914)。2001年6月25日,Java消息服务发布JMS 1.0.2b,2002年3月18日Java消息服务发布 1.1. Java消息服务(Java Message Service,JMS)应用程序接口是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行...
2017-02-05 18:09:58 210
原创 Apache Kafka消息传递可靠性分析
如果MQ没有类似数据库事务结构和保证,是不可能达到消息投递100%可靠的,极端情况下消息投递要么丢失或重复。 下面咋们从producer,broker,consumer的角度分析一下Kafka中会出现哪些情况: 1.producer发送消息到Broker 目前生产者发送消息(request.required.acks)有三种方式。 acks = 0: producer不会...
2017-02-05 18:09:47 80
原创 Kafka文件存储机制那些事
Kafka是什么 Kafka是最初由Linkedin公司开发,是一个分布式、分区的、多副本的、多订阅者,基于zookeeper协调的分布式日志系统(也可以当做MQ系统),常见可以用于web/nginx日志、访问日志,消息服务等等,Linkedin于2010年贡献给了Apache基金会并成为顶级开源项目。 1.前言 一个商业化消息队列的性能好坏,其文件存储机制设计是衡量一个消息队列...
2017-02-05 18:05:33 87
原创 PV模型
你想建设一个能承受500万PV/每天的网站吗? 500万PV是什么概念?服务器每秒要处理多少个请求才能应对?如果计算呢? 一、PV是什么 PV是page view的简写。PV是指页面的访问次数,每打开或刷新一次页面,就算做一个pv。 二、计算模型 每台服务器每秒处理请求的数量=((80%*总PV量)/(24小时*60分*60秒*40%)) / 服务器数量 。 其中关键...
2017-02-05 18:05:20 510
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人