IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> Kafka学习- kafka的架构组件概念学习 -> 正文阅读

[大数据]Kafka学习- kafka的架构组件概念学习

1.Kafka消息和批次

? ? ?Kafka的数据单元被称为消息。消息在kafka中是由字节数组组成的,每个消息都会携带一个键,当消息需要被发布到分区时,可以指定分区,也可以轮询分发到分区,还可以根据键的散列值以分区数取模来决定消息应该发往哪个分区。

在Kafka中,为了提高性能,消息是分批次发送到分区中的。批次就是一组消息,这些消息属于同一个主题和分区。如果每个消息都触发一次kafka服务器连接,那么大量的数据会导致大量的网络开销。分批发送虽然减少了网络开销,但是会导致消息延迟,并且每批次数据量大小,也会影响每批次数据处理的时间的长短,所以批次数据发送前是会被压缩的。所以开发人员需要根据业务需求决定每批次发送的条件:每批次数据量、每批次数据量延迟时间。如:5ms 内任一时刻达到100条消息时发送,如果到了5ms,数据量还没达到100条,也发送。

2.主题和分区

? ? ? Kafka是以 Topic 来管理消息的,也就是说Kafka中有一堆 Topic。就像一个小学校有5个年级,每个年级有5个班级,每个班级有20个学生。每个年级就是Kafka中的Topic,每个班级就是Topic下的分区,每个学生就是消息。每个年级下的学生都基本是同龄的,要学习同样的课程,要参加同样的活动等等,kafka中同一个topic下都是同类型的消息,每个topic下不管多少个分区,同一个topic下的这些分区中的消息都是同一类型的消息,最终会被同一个消费者消费(同一个消费组,消费组中的每个消费者业务逻辑一样)。

? ? ?由于 Topic 下有多个分区,所以不能保证一个 Topic 下的全局顺序,但是可以保证 每个分区的顺序性。如果想要保证一个 Topic 下的的全局顺序,可以在一个 Topic 下只设置一个分区。但是这样会牺牲高性能和高吞吐量的性能,而且无法保证 kafka的消息容量的可伸缩性。一个 Topic 下可有多个分区,这些分区可以分布在不同的服务器上,所以能比单个kafka服务器提供更强大的性能。

3.生产者和消费者

极端情况下,可以认为一个Topic就是一个队列,一个消费组就是一个消费者。实际应用中,一个topic是有多个分区(队列),一个消费组是有多个消费者(相同业务处理逻辑的消费节点)。每个Topic中的一个消息只会被一个订阅它的消费组消费一次。

生产者:生产消息,把消息发布到topic的分区中。生产者发送消息到topic分区时,可以是设置是轮询的,也可以根据生产者为每个消息生成的键key根据散列值对分区数取模来均衡消息到分区。

消费者:读取分区中的消息。消息中的元数据有键key、偏移量offset。消费者会按照消息被写入的顺序来读取消息(单个分区上),消费者会检查消息的偏移量来确保消息是否被该消费者消费过,被消费的消息不会被kafka删除,这些消息都有过期时间,到了过期时间后会被删除,过期时间可以设置。在每个分区里,每个消费者的偏移量都是唯一的,消费者会把最近一次读取的消息的偏移量保存到kafka或者zookeeper中,所以消费者宕机重启后,消费记录不会丢失,能接着宕机前的消息继续消费。

消费群组:一个消费群组中的消费者消费的是同一个主题的消息。可以认为一个消费群组就是一个消费者,这个消费者会订阅一个主题的消息来消费,当消息量大的时候,可以在这个消费群组中扩展消费节点,消费者节点增加,提升了消费性能。但是每个消费组中接收到消息后,只会被该组中的一个消费者消费。一个Topic中的分区是被均衡在一个消费组中的消费者上的,当其中一个消费者宕机后,被它消费的分区会被这个消费组中的其它消费者接管。

?4.broker和集群

一个独立的Kafka服务器被称为broker。broker接收来自生产者的消息,为消息设置偏移量,并提交消息到磁盘保存。broker为消费者提供服务,对读取分区的请求做出响应,返回已经提交到磁盘上的消息。根据特定的硬件及其性能特征,单个broker可以轻松处理数千个分区以及每秒百万级的消息量。--------引用《Kafka权威指南》

?broker是集群的组成部分。每个集群都有一个broker同时充当了集群控制的角色。控制器负责管理工作,包括将分区分配给broker和监控broker。

?--------引用《Kafka权威指南》

从上图可以分析出,在Kafka集群中,一个主题的多个分区可以横跨多个服务器,主题A的分区0在broker1上,主题A的分区1在broker2上,那么broker1就相当于分区0的主机,broker2相当于分区1的主机。它们分别有自己的从机broker2和broker1。那么一个broker可以同时充当一个分区的主机和另一个分区的从机。当主机故障时,会从从机中选择一个出来作为主机。

保留消息:Kafka的broker中一般不会消费完消息立马删除,默认的是保留消息7天,可以设置。也可以指定超过一定大小字节数后再删除消息。

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章           查看所有文章
加:2021-07-10 11:34:54  更:2021-07-10 11:35:48 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/22 23:33:09-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码