深入读懂 Kafka集群

前言
概述
Kafka是一个多分区、多副本的分布式流处理平台,以高吞吐、可持久化、可水平扩展、支持流数据处理等多种特性被广泛使用。
应用场景
(1)缓冲削峰:有利于解决生产消息和消费消息的处理速度不一致的情况,不会因为突发超负荷请求而崩溃,消息队列能够使用关键组件顶住突发和访问压力
(2)解耦:允许独立的扩展或修改队列两边的处理过程
(3)异步通信:允许用户将消息放入队列但不立即处理它
消息队列类型
(1)点对点模式
(2)发布/订阅模式 Topic队列
专有名词解释
(1)Leader:Kafka的Topic分区被划分为一个Leader副本和多个Follower副本,Producer和Consumer的请求都由Leader来响应
(2)ISR:(同步副本集)Leader以及与Leader保持同步的所有副本的集合,如果一个副本在30s内没有追上Leader的Log End Offset,就会被移除ISR集合,对应参数为replica.lag.time.max.ms

(3)LEO:全称Log End Offset,每一个副本的最后一个Offset,也就是副本当前Offset+1
(4)High Watermark:高水位线,所有副本当中最小的LEO+1
基础架构
Broker对应服务器,由多台Broker组成Kafka集群,每一个broker内可以包含多个消息队列,每一个Topic又可以划分多个分区存放于不同的Broker上,同一个分区可以设置多个副本,同一分区及其副本当中包含一个Leader副本和剩余的Follower副本,Leader副本负责对外提供读写服务,Follower副本只起到数据同步做高可用的作用,当Leader副本失效时其余Follower副本可以在短时间内通过选举选出新的Leader分区来对外提供服务。为提供消息的消费速度,消费者也可以由消费者构成消费者组,组内每个消费者只能对应消费一个topic分区的数据,换句话说也就是一个分区只能由一个组内消费者消费,不同消费者组之间互不影响。ps:消费者组是逻辑上的一个订阅者。
分区的好处
每一个Partition在一个broker上存储,可以把海量的数据按照分区切割成一块一块的存储在多台Broker上,合理控制分区的任务,能够实现一个消费者组在同一个Topic的多个分区并发消费,提高并发,达到负载均衡的效果,注意:同一Topic的多个分区在并发消费时并不能保证消费消息顺序的顺序,因为虽然每一个分区内的消息被索引并联同时间戳存储在一起,每个分区的数据因时间戳而有序(表现形式为一个个文文件夹)
副本的好处
副本机制也可以称作备份机制,在Kafka集群中分区多副本策略好处在于
(1)能够提够数据冗余,一定程度上保障高可用
Kafka是基于Leader-based的副本机制,一个分区的多个副本中包含一个Leader副本和Follower副本,Follower副本对外不提供服务,依托Kraft模式的kafka集群感知,会立即开启新一轮选举epoch,老Leader副本重新上线后只能作为follower副本加入到集群中
Partition与Topic的关系
(1)一个Partition只属于一个Topic,每一个Partition里的消息都是有序的
(2)一个Topic理论上可以拥有无数个Partition,过少不满足消费者组的并发,过多会占用内存和文件描述符
(3)同一个Topic的不同Partition内容不一样,每个分区对其上的消费者组都有详细Offset,在消费者者断线后可以通过Partition上记录上一次消费到的Offset来继续消费,保证了同一分区不重复消费。
(4)同一Topic不同的Partition能够分布到不同Broker上
(5)Partition规则设置得当能够使同一个Topic的消息均匀落在不同的Partition,如果消费者对消费的消息有强制的顺序要求,那么其消费的Topic只能设置Partition为一个,因为只有这样才可以因为
默认分区规则
(1)如果生产者没有指定分区,也没有指定Key,那么消息会通过轮询策略直接进入分区
(2)如果生产者没有指定分区,但是指定了Key,那么会通过对Key进行Hash操作来判断消息落在哪个分区上
(3)如果生产者指定了分区,那么消息会直接进入该分区
副本数据同步策略
确保有Follower副本与Leader完成一次同步Leader再发送ACK,这样才能保证Leader挂掉之后,Follow选举新Leader时新Leader存有完整数据;如果采取所有副本同步完再让Leader节点发送ACK那遇到Follower故障时就会出现问题,为解决这个问题kafka开发者为Leader维护一个动态的ISR,只要ISR中已同步的副本数超过了我们设置的最小数,Leader就可以发送ACK了,
Kafka的删除策略
(1)由参数 log.retention.hours=168 控制,默认是7天,生产环境中建议根据数据量设置3天以下
也可以有Kafka管控平台进行设置
(2)由参数 log.retention.bytes=1073741820 保留最近GB数据
(3)也可以通过log.retention.bytes=compact设置保留参数,到期后消息不会被删除,但会被进行去重处理,但是设置这种模式要求每一个消息都设置Key
kafka数据IO中的零拷贝
深入读懂 Kafka集群的更多相关文章
- 一文读懂clickhouse集群监控
更多精彩内容,请关注微信公众号:后端技术小屋 一文读懂clickhouse集群监控 常言道,兵马未至,粮草先行,在clickhouse上生产环境之前,我们就得制定好相关的监控方案,包括metric采集 ...
- Kafka集群的安装和使用
Kafka是一种高吞吐量的分布式发布订阅的消息队列系统,原本开发自LinkedIn,用作LinkedIn的活动流(ActivityStream)和运营数据处理管道(Pipeline)的基础.现在它已被 ...
- Kafka集群安装部署、Kafka生产者、Kafka消费者
Storm上游数据源之Kakfa 目标: 理解Storm消费的数据来源.理解JMS规范.理解Kafka核心组件.掌握Kakfa生产者API.掌握Kafka消费者API.对流式计算的生态环境有深入的了解 ...
- 《Apache kafka实战》读书笔记-管理Kafka集群安全之ACL篇
<Apache kafka实战>读书笔记-管理Kafka集群安全之ACL篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 想必大家能看到这篇博客的小伙伴,估计你对kaf ...
- 【译】调优Apache Kafka集群
今天带来一篇译文“调优Apache Kafka集群”,里面有一些观点并无太多新颖之处,但总结得还算详细.该文从四个不同的目标出发给出了各自不同的参数配置,值得大家一读~ 原文地址请参考:https:/ ...
- 4 kafka集群部署及kafka生产者java客户端编程 + kafka消费者java客户端编程
本博文的主要内容有 kafka的单机模式部署 kafka的分布式模式部署 生产者java客户端编程 消费者java客户端编程 运行kafka ,需要依赖 zookeeper,你可以使用已有的 zo ...
- kafka集群与zookeeper集群 配置过程
Kafka的集群配置一般有三种方法,即 (1)Single node – single broker集群: (2)Single node – multiple broker集群: (3)Mult ...
- kafka集群原理介绍
目录 kafka集群原理介绍 (一)基础理论 二.配置文件 三.错误处理 kafka集群原理介绍 @(博客文章)[kafka|大数据] 本系统文章共三篇,分别为 1.kafka集群原理介绍了以下几个方 ...
- helm安装kafka集群并测试其高可用性
介绍 Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写.Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者在网站中的所有动作流数据. 这种动作( ...
- 六十一.常用组件 、 Kafka集群 、 Hadoop高可用
1.Zookeeper安装搭建Zookeeper集群并查看各服务器的角色停止Leader并查看各服务器的角色 1.1 安装Zookeeper1)编辑/etc/hosts ,所有集群主机可以相互 pin ...
随机推荐
- windows mysql安装及常用命令
安装windows版本mysql只是为本地代码调试,不建议用于生产.觉得步骤麻烦也可以直接下载集成环境(如xampp),一键安装即可用.之前本地测试都用一键安装,今天换个方法玩玩,安装步骤如下: my ...
- 02-UPF-Power Domain
How do we use power domain 使用UPF至少有一个power domain power domain可以进行嵌套 Defining Power Domain Example P ...
- [转帖]nginx优化配置及方法论
https://www.jianshu.com/p/87f8c03e91bd 1.优化方法论 从软件层面提升硬件使用效率 增大CPU的利用率 增大内存的利用率 增大磁盘IO的利用率 增大网络带宽的利用 ...
- [转帖]k8s集群部署工具kubeadm详解
https://zhuanlan.zhihu.com/p/670125857 kubeadm是快捷创建Kubernetes集群的最佳实践工具,我们只需用kubeadm init 和 kubeadm j ...
- Firewall-cmd 启用NAT开放内网机器通过能上网的机器访问外网的方法
Firewall-cmd 启用NAT开放内网机器通过能上网的机器访问外网的方法 背景说明 昨天的处置已经可以让外部可以使用唯一的电信IP地址访问内部交换机的服务器了. 但是今天的场景是想让内网交换机的 ...
- FS OFS RS ORS
- 【遇到一个怪异的问题】使用embed来加载模版,只要写在init()函数中就会导致HTTP服务出错
作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢! cnblogs博客 zhihu Github 公众号:一本正经的瞎扯 经过反复测试,只要换一个写法就能开启/重现这个怪异的问题. ...
- 【JS 逆向百例】吾爱破解2022春节解题领红包之番外篇 Web 中级题解
关注微信公众号:K哥爬虫,持续分享爬虫进阶.JS/安卓逆向等技术干货! 逆向目标 本次逆向的目标来源于吾爱破解 2022 春节解题领红包之番外篇 Web 中级题,吾爱破解每年都会有派送红包活动(送吾爱 ...
- vulnhub靶场渗透学习
攻击机:192.168.100.251 目标机:192.168.100.17 netdiscover netdiscover -r 192.168.100.1/24 Currently scannin ...
- Gorm 关联关系介绍与基本使用
目录 一 Belongs To(一对一) 1.1 Belongs To 1.2 重写外键 1.3 重写引用(一般不用) 1.4 Belongs to 的 CRUD 1.5 预加载 1.6 外键约束 二 ...