前言

概述

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之零拷贝技术By_Iamxiaofu

深入读懂 Kafka集群的更多相关文章

  1. 一文读懂clickhouse集群监控

    更多精彩内容,请关注微信公众号:后端技术小屋 一文读懂clickhouse集群监控 常言道,兵马未至,粮草先行,在clickhouse上生产环境之前,我们就得制定好相关的监控方案,包括metric采集 ...

  2. Kafka集群的安装和使用

    Kafka是一种高吞吐量的分布式发布订阅的消息队列系统,原本开发自LinkedIn,用作LinkedIn的活动流(ActivityStream)和运营数据处理管道(Pipeline)的基础.现在它已被 ...

  3. Kafka集群安装部署、Kafka生产者、Kafka消费者

    Storm上游数据源之Kakfa 目标: 理解Storm消费的数据来源.理解JMS规范.理解Kafka核心组件.掌握Kakfa生产者API.掌握Kafka消费者API.对流式计算的生态环境有深入的了解 ...

  4. 《Apache kafka实战》读书笔记-管理Kafka集群安全之ACL篇

    <Apache kafka实战>读书笔记-管理Kafka集群安全之ACL篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 想必大家能看到这篇博客的小伙伴,估计你对kaf ...

  5. 【译】调优Apache Kafka集群

    今天带来一篇译文“调优Apache Kafka集群”,里面有一些观点并无太多新颖之处,但总结得还算详细.该文从四个不同的目标出发给出了各自不同的参数配置,值得大家一读~ 原文地址请参考:https:/ ...

  6. 4 kafka集群部署及kafka生产者java客户端编程 + kafka消费者java客户端编程

    本博文的主要内容有   kafka的单机模式部署 kafka的分布式模式部署 生产者java客户端编程 消费者java客户端编程 运行kafka ,需要依赖 zookeeper,你可以使用已有的 zo ...

  7. kafka集群与zookeeper集群 配置过程

    Kafka的集群配置一般有三种方法,即 (1)Single node – single broker集群: (2)Single node – multiple broker集群:    (3)Mult ...

  8. kafka集群原理介绍

    目录 kafka集群原理介绍 (一)基础理论 二.配置文件 三.错误处理 kafka集群原理介绍 @(博客文章)[kafka|大数据] 本系统文章共三篇,分别为 1.kafka集群原理介绍了以下几个方 ...

  9. helm安装kafka集群并测试其高可用性

    介绍 Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写.Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者在网站中的所有动作流数据. 这种动作( ...

  10. 六十一.常用组件 、 Kafka集群 、 Hadoop高可用

    1.Zookeeper安装搭建Zookeeper集群并查看各服务器的角色停止Leader并查看各服务器的角色 1.1 安装Zookeeper1)编辑/etc/hosts ,所有集群主机可以相互 pin ...

随机推荐

  1. 昆虫科学院 AtCoder Race Ranking 2023 Autumn

    概况 为提高选手们的训练 / 比赛热情,我们(昆虫科学院)通过商讨,在 \(2023-5-25\) 仿照 AtCoder Race Ranking (WTF) 机制,设立了"昆虫科学院 At ...

  2. CSS 动画 : 创建 3D 立方体

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. file-loader返回object Module 路径的问题

    新版本的  file-loader生成使用ES模块语法的JS模块,所以它加载的文件,不再返回路径,而是返回一个对象,通过对象.default属性,可以取得路径 所以第一种方法,可以修改路径 <i ...

  4. 代码使我头疼之React初学习

    前言 开始了,去年(2020)说要学的React,到现在2021年的12月底了,才来实施--(年底警告!年末总结还没开始写!) 不过前端为啥要学React呢?Vue不是很好用吗?Vue确实很好用,并且 ...

  5. 部分MySQL的SQL信息整理

    模块补丁信息查看 select su as 补丁模块, count(1) as 数量 from gsppatchlog where TO_DAYS( NOW( ) ) - TO_DAYS(deploy ...

  6. [转帖]061、监控指标之TiKV

    资源相关 Grafana监控 TiKV-Details -> Cluster - Store Size / Available Size Grafana监控 TiKV-Details -> ...

  7. [转帖]Web技术(六):QUIC 是如何解决TCP 性能瓶颈的?

    文章目录 一.QUIC 如何解决TCP的队头阻塞问题? 1.1 TCP 为何会有队头阻塞问题 1.2 QUIC 如何解决队头阻塞问题 1.3 QUIC 没有队头阻塞的多路复用 二.QUIC 如何优化T ...

  8. [转帖]修改vcenter数据库账号密码

    1.修改sqlserver sa账号密码 2.停止vcenter服务 cd C:\Program Files\VMware\vCenter Server\bin service-control --l ...

  9. [转帖]setsockopt(setsockopt的使用方法及注意事项)

    http://xingzuo.aitcweb.com/9156453.html 1. setsockopt简介 setsockopt是一个系统调用函数,用于设置套接字选项.套接字是指通信的两个端点之间 ...

  10. [转帖]java -d 参数(系统属性) 和 环境变量

    https://www.cnblogs.com/limeiyang/p/16565920.html 1. -d 参数说明 通过 java -h 查看可知: 注意:-D= : set a system ...