深入读懂 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 ...
随机推荐
- MyBatis 系列:MyBatis 源码环境搭建
目录 一.环境准备 二.下载 MyBatis 源码和 MyBatis-Parent 源码 三.创建空项目.导入项目 四.编译 mybatis-parent 五.编译 mybatis 六.测试 总结 一 ...
- 18-CMOS门电路
CMOS门电路 TTL是三极管构成的门电路,逐步被CMOS电路替代.CMOS电路能耗低.集成度高. CMOS反相器 CMOS管是由PMOS和NMOS组成,这里用的都是使用的增强型. COMS能够正常工 ...
- Django应用中的静态文件处理
在日常开发中,我们都是把Django的Debug模式打开,方便调试,在这个模式下,由Django内置的Web服务器提供静态文件服务,不过需要进行一些配置,才能正确访问. 配置settings # St ...
- [转帖]OutOfMemory JVM参数一览
https://www.cnblogs.com/kuroro/p/11707951.html JVM提供了有用的参数来处理OutOfMemoryError.在本文中,我们要强调那些JVM参数.在对Ou ...
- [转帖]一文看懂Linux内核页缓存(Page Cache)
https://kernel.0voice.com/forum.php?mod=viewthread&tid=629 玩转Linux内核 发布于 2022-8-9 22:19:08 阅读 ...
- [转帖]ORACLE恢复神器之ODU/AUL/DUL
https://www.cnblogs.com/oracle-dba/p/3873870.html 分享ORACLE数据库恢复神器之ODU.DUL和AUL工具. ODU:ORACLE DATABASE ...
- [转帖]使用 EXISTS 代替 IN 和 inner join
在使用Exists时,如果能正确使用,有时会提高查询速度: 1,使用Exists代替inner join 2,使用Exists代替 in 1,使用Exists代替inner join例子: 在一般 ...
- [转帖]Linux 页表、大页与透明大页
一. 内存映射与页表 1. 内存映射 我们通常所说的内存容量,指的是物理内存,只有内核才可以直接访问物理内存,进程并不可以. Linux 内核给每个进程都提供了一个独立的虚拟地址空间,并且这个地址空间 ...
- [转帖]3.3.7. 自动诊断和建议报告SYS_KDDM
https://help.kingbase.com.cn/v8/perfor/performance-optimization/performance-optimization-6.html#sys- ...
- Python学习之十八_获取神通数据库所有的表数据量
Python学习之十八_获取神通数据库所有的表数据量 背景 今天想获取一下所有数据库的表信息.但是发现神通数据库的系统表里面的表信息不正确 无法获取实际意义的表信息. 联系了下神通数据库的原厂高手. ...