kafka高吞吐,低延迟的分布式消息队列
核心概念
broker是kafka的节点,多台broker集群就是kafka
topic消息分为多个topic
partition分区,topic划分了多个partition分区,存在负载均衡策略
每个分区由一个个消息构成,消息在分区中被标识了递增的序号(表明了消息的偏移量)
每个分区各自维护一套偏移量
producer生产者,选择topic插入消息数据。根据kafka的分配策略,将消息插入某个分区队尾。
consumer消费者,选择topic并根据offset偏移量来获取消息数据,记录当前读取的消息的偏移量,下次读取从前一次的偏移量基础上继续读取。
消费者需要自己保存偏移量,通过修改偏移量实现读取不同位置的消息。多个消费者不会相互影响,线程安全,实现高并发消费。
消息数据的删除时间默认为7天
以partition为单位进行备份,每个partition设置一个leader(本身)和若干follower,随机分配在集群上。leader处理读写请求,follower不对外服务,拉取leader数据。
消费者组
偏移量实际属于消费者组。用户绑定消费者组,消费者组之间相互独立。
一条消息在一个组内只能消费一次,组中的多个用户不能多次读取这条消息
组会阻塞多用户同时访问一个分区
集群部署
消息同步ISR
isr列表监控follower的同步状态,isr列表由leader动态维护。
将同步状态满足条件的follower记录在列表中,将不满足条件的follower移出列表。
leader下线后,从isr列表中的follower中选举新的leader
条件参数
follower的fech拉取请求间隔时间(10s)
replica.lag.time.max.ms=10000
leader与follower相差记录数(4000)
replica.lag.max.messages=4000
API
生产者
消费者
数据丢失和重复读取
生产者消息丢失
原因1:kafka数据先存储在内存中,一段时间后溢写到硬盘中。那么节点宕机,在内存中的消息未持久化,随着内存一起丢失。
原因2:分区主从备份,leader分区宕机,从分区未及时拉取同步,导致数据丢失
处理方式:修改持久化触发参数(数据量,时间)
处理方式:修改。。。。
消息丢失(消费者)
原因:在High level模式下,客户端向zk提交了偏移量,但数据读取时消费节点挂了,导致偏移量之前的数据没处理完毕。消费节点再次上线,从zk获取偏移量并向后读取,之前的数据不再处理,最终导致消费数据的丢失。
解决:客户端每条消息处理完,再手动提交偏移量,关闭偏移量自动提交。
重复消费(消费者)
原因:数据处理完以后,偏移量自动提交,设置间隔时间较长。节点宕机后,获取的偏移量是前一次的,节点会重复执行已执行的消息。
解决:手动提交数偏移量
高吞吐
高吞量
pagecache(页缓存),基于系统内存的数据接收
磁盘顺序写,相对随机存效率百倍以上,尤其对于磁盘存储。
高吐量
零拷贝计数
pagecache -- 网卡bufffer(数据)+socket(描述符)-- 客户端
高吞吐
producer消息存入速度与consumer读取数据速度维持均衡,保证在数据flush到磁盘前读取数据,实现只在pagecache内存层面的队列高速吞吐。
kafka高吞吐,低延迟的分布式消息队列的更多相关文章
- 高吞吐低延迟Java应用的垃圾回收优化
高吞吐低延迟Java应用的垃圾回收优化 高性能应用构成了现代网络的支柱.LinkedIn有许多内部高吞吐量服务来满足每秒数千次的用户请求.要优化用户体验,低延迟地响应这些请求非常重要. 比如说,用户经 ...
- 深入浅出理解基于 Kafka 和 ZooKeeper 的分布式消息队列
消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题.实现高性能,高可用,可伸缩和最终一致性架构,是大型分布式系统不可缺少的中间件. 本场 Chat 主要内容: Kafk ...
- Kafka 和 ZooKeeper 的分布式消息队列分析
1. Kafka 总体架构 基于 Kafka-ZooKeeper 的分布式消息队列系统总体架构如下: 如上图所示,一个典型的 Kafka 体系架构包括若干 Producer(消息生产者),若干 bro ...
- 【转】快速理解Kafka分布式消息队列框架
from:http://blog.csdn.net/colorant/article/details/12081909 快速理解Kafka分布式消息队列框架 标签: kafkamessage que ...
- 分布式消息队列 Kafka
分布式消息队列 Kafka 2016-02-25 杜亦舒 Kafka是一个高吞吐量的.分布式的消息系统,由Linkedin开发,开发语言为scala具有高吞吐.可扩展.分布式等特点 适用场景 活动数据 ...
- Kafka 分布式消息队列介绍
Kafka 分布式消息队列 类似产品有JBoss.MQ 一.由Linkedln 开源,使用scala开发,有如下几个特点: (1)高吞吐 (2)分布式 (3)支持多语言客户端 (C++.Java) 二 ...
- Kafka分布式消息队列
基本架构 Kafka分布式消息队列的作用: 解耦:将消息生产阶段和处理阶段拆分开,两个阶段互相独立各自实现自己的处理逻辑,通过Kafka提供的消息写入和消费接口实现对消息的连接处理.降低开发复杂度,提 ...
- 一款低延迟的分布式数据库同步系统--databus
每次看到马路对面摩托罗拉的大牌子,都想起谷歌125亿美元收购摩托罗拉移动,后来又以29亿美元卖给联想的事情.谷歌所做的决策都比较考虑长远利益,在这串交易中,谷歌获得了摩托罗拉最有价值的几千项专利,稳健 ...
- 分布式消息队列Apache Pulsar
Pulsar简介 Apache Pulsar是一个企业级的分布式消息系统,最初由Yahoo开发并在2016年开源,目前正在Apache基金会下孵化.Plusar已经在Yahoo的生产环境使用了三年多, ...
随机推荐
- JS 获取验证码 倒计时
setInterval 一个定时器搞定 <style> button{ background: #45BCF9; color: #fff; padding: 4px 10px; borde ...
- dubbo之心跳机制
在网络传输中,怎么确保通道连接的可用性是一个很重要的问题,简单的说,在网络通信中有客户端和服务端,一个负责发送请求,一个负责接收请求,在保证连接有效性的背景下,这两个物体扮演了什么角色,心跳机制能有效 ...
- open_basedir的配置
.user.ini的使用 1.限制目录访问 解锁: chattr -i .user.ini 加锁: chattr +i .user.ini .user.ini配置 open_basedir=/项目路径 ...
- Linux - pip 安装使用说明
简介 pip类似RedHat里面的yum,安装Python包非常方便.本节详细介绍pip的安装.以及使用方法 方案一 wget https://bootstrap.pypa.io/get-pip.py ...
- SpringBoot多数据源:动态数据源
目录 1. 引言 2. 动态数据源流程说明 3. 实现动态数据源 3.1 说明及数据源配置 3.1.1 包结构说明 3.1.2 数据库连接信息配置 3.1.3 数据源配置 3.2 动态数据源设置 3. ...
- ASP.NET 模型验证2--验证部分属性
在开发MVC时,模型验证非常常见,平常我们用的应该都是全验证 if(ModelState.IsValid){ //验证成功要做的事 .....} 但是有时候我们需要部分验证,比如修改用户信息时,因为更 ...
- day30 NFS服务器概述
02. NFS存储服务概念介绍 NFS是Network File System的缩写,中文意思是网络文件共享系统, 它的主要功能是通过网络(一般是局域网)让不同的主机系统之间可以共享文件或目录 存储服 ...
- 运筹学学报-运行问题之新版TeX系统支持修改
<运筹学学报>的LaTeX模板基本上是CCT的典型而且是停留在LaTeX2.09 的时代,故而很多用户下载其模板无法在新TeX系统里使用,这里提供以下解决方案.源文件中的前几行:\docu ...
- 【资源分享】Gmod日志记录脚本
*----------------------------------------------[下载区]----------------------------------------------* ...
- [CF]Round513
A Phone Numbers 题意:定义"电话号码"为开头为'8',长度为11的字符串.给定一些字符,每个字符只能用一次,求可以拼出多少个电话号码(可以重复). 直接min(st ...