前言

概述

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. python爬虫-豆瓣电影top250

    一.python爬虫简介1.什么是爬虫:网络爬虫,是一种按照一定规则,自动抓取互联网信息的程序或者脚本.由于互联网数据的多样性和资源的有限性,根据用户需求定向抓取相关网页并分析已成为如今主流的爬取策略 ...

  2. docker 原理之 namespace (上)

    1. namespace 资源隔离 namespace 是内核实现的一种资源隔离技术,docker 使用 namespace 实现了资源隔离. Liunx 内核提供 6 种 namespace 隔离的 ...

  3. CDC设计实例-01

    CDC设计实例 Clock Gating Cell & Glitch Free Clock Switch(门控单元和动态切换时钟) 一个电路有多个时钟输入进来,希望在工作当中能够动态切换时钟; ...

  4. Go-获取密码的sha值

    // 对用户密码进行加密 func EncodePwd(pwd string) string { s := sha256.New() s.Write([]byte(pwd)) data := s.Su ...

  5. [转帖]超好用的自带火焰图的 Java 性能分析工具 Async-profiler 了解一下

    https://cloud.tencent.com/developer/article/1554194 火焰图 如果你经常遇到 Java 线上性能问题束手无策,看着线上服务 CPU 飙升一筹莫展,发现 ...

  6. JVM内存用量的再学习

    JVM内存用量的再学习 背景 最近解决一个SQLServer的问题耗时很久. 最终找到了一个看似合理的问题解释. 但是感觉不能只是总结于数据库方面 因为为了解决这个问题增加了很多监控措施. 所以想就这 ...

  7. [转帖]win10多网卡指定ip走某个网卡的方案

    https://zhuanlan.zhihu.com/p/571614314 我的电脑上有两个网卡,一个网卡A(网线),一个是网卡B(WIFI). 需求:网卡A和网卡B是不同的网络,网卡A已经把338 ...

  8. [转帖]docker使用阿里镜像源

    ps:docker使用阿里镜像源特别快 首先安装docker:参考https://www.jianshu.com/p/2dae7b13ce2f 一.使用阿里镜像地址: dockerd --regist ...

  9. 【转帖】eBay 流量管理之 Kubernetes 网络硬核排查案例

    https://www.infoq.cn/article/L4vyfdyvHYM5EV8d3CdD 一.引子 在 eBay 新一代基于 Kubernetes 的云平台 Tess 环境中,流量管理的实现 ...

  10. [转帖]超线程SMT究竟可以快多少?(AMD Ryzen版 )

    https://www.modb.pro/db/139224 昨天我们用Intel I9的10核,每个核2个threads的机器跑了内核的编译: 超线程SMT究竟可以快多少? 今天,我换一台机器,采用 ...