kafka 理论知识

这篇具有很好参考价值的文章主要介绍了kafka 理论知识。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1 首先要了解kafka是什么

Kafka是一个分布式的消息订阅系统

1.1  kafka存储消息的过程

消息被持久化到一个topic中,topic是按照“主题名-分区”存储的,一个topic可以分为多个partition,在parition(分区)内的每条消息都有一个有序的id号,这个id号被称为偏移(offset),记录消息的消息位置**

1.2  partition 不能不了解的知识

Partition是Kafka中数据分布的基本单位,里面的数据是储存在硬盘中的,追加式的,通过将数据分散到多个Partition上,多个partition可以并行处理数据,所以可以处理相当量的数据,可以实现数据的并行处理和负载均衡。同一个 Consumer Group 中,只有一个 Consumer 实例可消费某个 Partition 的消息; 每个Topic可以根据预期的数据量和处理需求设置适当数量的Partition

虽然分区机制可以提高系统的整体吞吐量,但它并不是为了实现负载均衡而设计的。相反,Kafka 更关注的是数据的持久性、可用性和容错能力

请注意,Partition的数量一旦确定后,一般情况下是不能直接更改的。因为更改Partition数量可能会影响数据的分布和处理,所以在设计Topic时需要仔细考虑预期的数据量、吞吐量以及系统的伸缩性需求。

1.3 partition和replica之间的暧昧关系

具体来说,Kafka 通过将主题(topic)分为多个分区(partition),并将每个分区复制到多个节点上来实现高可用性和扩展性。每个分区都有一个主节点(leader)和多个副本节点(replica)。主节点负责处理来自生产者的消息和消费者的读取请求,而副本节点则用于备份数据并提供冗余。如果主节点失效,Kafka 会自动选举一个副本节点作为新的主节点,以保持服务的连续性。**

这种设计确保了高可用性和数据冗余,但并不是所有节点都直接参与消息的处理。

2 kafka的相关名词

1.producer:
  消息生产者,发布消息到 kafka 集群的终端或服务。
2.broker:
  kafka 集群中包含的服务器。
3.topic:
  每条发布到 kafka 集群的消息属于的类别,即 kafka 是面向 topic 的。
4.partition:
  partition 是物理上的概念,每个 topic 包含一个或多个 partition。kafka 分配的单位是 partition。
5.consumer:
  从 kafka 集群中消费消息的终端或服务。
6.Consumer group:
  high-level consumer API 中,每个 consumer 都属于一个 consumer group,每条消息只能被 consumer group 中的一个 Consumer 消费,但可以被多个 consumer group 消费。
7.replica:
  partition 的副本,保障 partition 的高可用。
8.leader:
  replica 中的一个角色, producer 和 consumer 只跟 leader 交互。
9.follower:
  replica 中的一个角色,从 leader 中复制数据。
10.controller:
  kafka 集群中的其中一个服务器,用来进行 leader election 以及 各种 failover。
12.zookeeper:
  kafka 通过 zookeeper 来存储集群的 meta 信息

2.1 kafka的工作流程 

kafka 理论知识,ELK日志分析系统—ELKstack,kafka,分布式

3 不能不知道的主角zk

在 Kafka 中,ZooKeeper(简称为ZK)并不用来直接存储消息数据,而是用于协调和管理 Kafka 集群的元数据和状态信息。ZooKeeper 在 Kafka 中扮演以下几个角色:

1. 保存 Kafka 集群的元数据:ZooKeeper 存储了关于 Kafka 集群的元数据,包括主题(topics)、分区(partitions)、副本(replicas)等信息。这些元数据描述了 Kafka 集群的整体结构和配置。
2. 管理消费者组的偏移量(offset):ZooKeeper 用于存储和管理消费者组的偏移量信息。消费者组在消费消息时,会将当前消费的偏移量保存在 ZooKeeper 中,以便后续继续消费。

3. 选举 Kafka 控制器(Controller):Kafka 集群中的一个节点会被选举为控制器,负责管理分区的分配和副本的重新分配。ZooKeeper 用于协调和选举控制器节点。
4. 监测集群成员状态:ZooKeeper 监测和报告 Kafka 集群中各个节点的状态,例如节点的上线和下线。

3.1 生产者往zk注册消息

消息发送者会在Zookeeper中注册相关信息,在Zookeeper中获取Broker以及Topic的信息,然后将消息数据写入到指定的Kafka Topic中。

3.2 消费者往zk注册

Kafka依托于Zookeeper来注册Broker的信息,消费者会在Zookeeper注册消费者信息,同时也是通过Zookeeper来发现Kafka中的Broker列表。

发送者和消费者都会在Zookeeper中注册信息,通过Zookeeper来获取要存储或者消费的Kafka Broker列表。

Kafka的消息数据都是存储在Topic中的,Kafka会将Topic的元数据(信息)存储在Zookeeper中,维护Topic和Broker的关系,只存储元数据不存储消息数据

3.3 你知道的元数据

(topic信息;topic有哪些分区,哪些副本,分别在哪台broker上,哪个是leader;consumer信息及读取消息后提交的偏移量数据等),元数据存储在zk中

3.4 被需要的zk

Kafka使用Zookeeper的原因:Kafka中会有若干个Broker,Broker需要通过分布式协调服务来维护,统一管理Broker的配置信息,客户端和消费者直接从配置中心获取Broker的信息,为Broker与Broker之间的请求建立安全协议,而这种分布式协调服务中Zookeeper是最可靠的

每个broker只存储消息体,不存储元数据

4、非常关键(副本)

高可用,数据持久化,数据备份

4.1 kafka副本的选举策略

其中:kafka分区中所有的副本统称未AR;副本leader的选举策略为:在isr中存活为前提,按照AR中排在前面的优先,例如AR[1,0,2] ,isr [1,0,2],那么leader就会按照1,0,2的顺序进行轮询

4.2 分区和副本数据一致性

  1. 分区领导者选举:每个分区都有一个 leader 和多个副本(replica)。在一个分区中,只有 leader 能够处理读写请求,而副本只负责复制数据以实现高可用性。当某个分区的 leader 发生故障或宕机时,Kafka 需要在副本中选择一个新的 leader。这个选举过程由 ZooKeeper 协助完成。ZooKeeper 负责跟踪每个分区的 leader 和副本状态,并在 leader 不可用时发起新的选举。

  2. ISR(In-Sync Replicas)机制:Kafka 引入了 ISR 机制来确保 leader 和 leader 副本之间的数据一致性。ISR 是指与 leader 处于同步状态的副本集合。在正常情况下,leader 和 ISR 中的副本具有相同的数据。当生产者发送消息时,只有写入 leader 并复制到 ISR 中的副本才被视为成功。这确保了所有可用的副本在给定时间点都具有相同的数据。

  3. 消息确认机制:生产者发送消息后,可以选择等待确认或异步发送。如果设置为等待确认,生产者将在消息成功写入 leader 和 ISR 中的所有副本之后,收到来自 Kafka 的确认。这种方式保证了消息的可靠性。

  4. 数据同步:Kafka 使用副本同步机制来保持 leader 和 follower 副本之间的数据一致性。当消息被写入 leader 时,leader 将消息发送给其 ISR 中的所有副本。副本收到消息后会回复确认,leader 在收到 ISR 中的大多数副本确认后才认为消息成功提交,然后将确认发送给生产者。这确保了所有 ISR 中的副本在给定时间点具有相同的数据。

5、producer发布消息

producer 采用 push 模式将消息发布到 broker,每条消息都被 append 到 patition 中,属于顺序写磁盘(顺序写磁盘效率比随机写内存要高,保障 kafka 吞吐率)。

5.1 是如何发布消息到分区的

producer 发送消息到 broker 时,会根据分区算法选择将其存储到哪一个 partition。

其路由机制为:

1. 指定了 patition,则直接使用;

2. 未指定 patition 但指定 key,通过对 key 的 value 进行hash 选出一个 patition

3. patition 和 key 都未指定,使用轮询选出一个 patition

5.2 流程说明:

 

kafka 理论知识,ELK日志分析系统—ELKstack,kafka,分布式

1. producer 先从 zookeeper 的 "/brokers/.../state" 节点找到该 partition 的 leader

2. producer 将消息发送给该 leader

3. leader 将消息写入本地 log

4. followers 从 leader pull 消息,写入本地 log 后 leader 发送 ACK

5. leader 收到所有 ISR 中的 replica 的 ACK 后,增加 HW(high watermark,最后 commit 的 offset) 并向 producer 发送 ACK

5.3 发送消息topic分类

Producer即生产者,向Kafka集群发送消息,在发送消息之前,会对消息进行分类,即Topic,两个producer发送了分类为topic1的消息,另外一个发送了topic2的消息。 Topic即主题,通过对消息指定主题可以将消息分类,消费者可以只关注自己需要的Topic中的消息 Consumer即消费者,消费者通过与kafka集群建立长连接的方式,不断地从集群中拉取消息,然后可以对这些消息进行处理。 从上图中就可以看出同一个Topic下的消费者和生产者的数量并不是对应的

6 消费者消费消息

在消费者消费消息时,kafka使用offset来记录当前消费的位置 在kafka的设计中,可以有多个不同的group来同时消费同一个topic下的消息,有两个不同的group同时消费,他们的的消费的记录位置offset各不相同,不互相干扰。 对于一个group而言,消费者的数量不应该多余分区的数量,因为在一个group中,每个分区至多只能绑定到一个消费者上,即一个消费者可以消费多个分区,一个分区只能给一个消费者消费 因此,若一个group中的消费者数量大于分区数量的话,多余的消费者将不会收到任何消息。

7、broker存储消息周期分类

Kafka中的消息保留策略是通过配置参数进行配置的。一种常见的配置是使用时间保留策略,即设置一个保留时间,超过该时间的消息将被删除。另一种常见的策略是基于消息的大小来设置保留策略,即设置一个最大的消息保留容量,一旦超过这个容量,旧的消息将被删除。

因此,即使消息被消费完,它们可能在Kafka集群中保留一段时间,直到达到保留策略所定义的条件。这样可以确保消息在需要时可以重新消费或重新读取。但请注意,一旦消息达到保留策略的条件,它们将被永久删除,无法再次访问。

无论消息是否被消费,kafka 都会保留所有消息。有两种策略可以删除旧数据:

  1. 基于时间:log.retention.hours=168

  2. 基于大小:log.retention.bytes=1073741824 需要注意的是,因为Kafka读取特定消息的时间复杂度为O(1),即与文件大小无关,所以这里删除过期文件与提高 Kafka 性能无关文章来源地址https://www.toymoban.com/news/detail-629263.html

到了这里,关于kafka 理论知识的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Distributed】分布式ELK日志文件分析系统(一)

      日志主要包括系统日志、应用程序日志和安全日志。系统远维和开发人员可以通过日志了解服务器软硬件信息、检查配置过程中的错误及错误发生的原因。经常分析日志可以了解服务器的负荷,性能安全性,从而及时采取措施纠正错误。   往往单台机器的日志我们使用

    2024年02月15日
    浏览(42)
  • 分布式技术--------------ELK大规模日志实时收集分析系统

    目录 一、ELK日志分析系统 1.1ELK介绍 1.2ELK各组件介绍 1.2.1ElasticSearch 1.2.2Kiabana 1.2.3Logstash 1.2.4可以添加的其它组件 1.2.4.1Filebeat filebeat 结合logstash 带来好处 1.2.4.2缓存/消息队列(redis、kafka、RabbitMQ等) 1.2.4.3Fluentd 二、为什么要使用 ELK 三、完整日志系统基本特征 四、ELK 的工作

    2024年04月17日
    浏览(49)
  • 部署ELK+Kafka+Filebeat日志收集分析系统

    ELK是三个软件的统称,即Elasticsearch、Logstash和Kibana三个开源软件的缩写。这三款软件都是开源软件,通常配合使用,并且都先后归于Elastic.co企业名下,故被简称为ELK协议栈。ELK主要用于部署在企业架构中,收集多台设备上多个服务的日志信息,并将其统一整合后提供给用户。

    2024年02月16日
    浏览(41)
  • EFLFK——ELK日志分析系统+kafka+filebeat架构

    node1节点 192.168.40.16 elasticsearch 2c/4G node2节点 192.168.40.17 elasticsearch 2c/4G Apache节点 192.168.40.170 logstash/Apache/kibana 2c/4G filebeat节点 192.168.40.20 filebeat 2c/4G https://blog.csdn.net/m0_57554344/article/details/132059066?spm=1001.2014.3001.5501 接上期elk部署我们这次加一个filebeat节点   //准备 3 台服务器做

    2024年02月14日
    浏览(37)
  • ELK分布式日志收集快速入门-(一)-kafka单体篇

    JDK 安装教程自行百度-这个比较简单。 zookeeper zookeeper安装参考地址((2条消息) 快速搭建-分布式远程调用框架搭建-dubbo+zookper+springboot demo 演示_康世行的博客-CSDN博客) 修改zookeeper配合文件 启动成功 开放端口号 下载kafka安装包 安装遇到的问题(由于网站证书不安全导致) 解

    2023年04月08日
    浏览(45)
  • 【ELK企业级日志分析系统】部署Filebeat+Kafka+Logstash+Elasticsearch+Kibana集群详解(EFLFK)

    参见安装与部署ELK详解 参见安装与部署EFLK详解 参见安装与部署Zookeeper集群详解 1.1.1 为什么需要消息队列(MQ) MQ(Message Queue)主要原因是由于 在高并发环境下,同步请求来不及处理,请求往往会发生阻塞 。比如大量的并发请求,访问数据库,导致行锁表锁,最后请求线程会

    2024年02月16日
    浏览(49)
  • 基于Filebeat、Kafka搭建ELK日志分析平台详细步骤

    写在前头:公司一直没有搭建一个支持实时查询日志的平台,平常看日志都得去服务器下载,大大降低开发效率,前段时间有大佬同事搭建了一款日志平台,支持sit,uat等各个环境的日志实时查询,大大提高bug定位速度。因对其感兴趣特向大佬请教,学习记录下搭建流程。 选

    2024年02月06日
    浏览(54)
  • ELK + Fliebeat + Kafka日志系统

    参考: ELK+Filebeat+Kafka分布式日志管理平台搭建_51CTO博客_elk 搭建 ELK 日志分析系统概述及部署(上)-阿里云开发者社区 ELK是三个开源软件的缩写,分别表示: Elasticsearch , Logstash, Kibana , 它们都是开源软件。新增了一个 FileBeat ,它是一个轻量级的日志收集处理工具(Agent),Fil

    2024年02月11日
    浏览(32)
  • ELK+Kafka+Zookeeper日志收集系统

    节点IP 节点规划 主机名 192.168.112.3 Elasticsearch + Kibana + Logstash + Zookeeper + Kafka + Nginx elk-node1 192.168.112.3 Elasticsearch + Logstash + Zookeeper + Kafka elk-node2 192.168.112.3 Elasticsearch + Logstash + Zookeeper + Kafka + Nginx elk-node3 修改主机名 配置映射 安装Elasticserach 三台主机都需安装java及elasticserach 启动

    2024年04月18日
    浏览(67)
  • ELK日志系统设计方案-Log4j日志直推Kafka

    ELK 日志系统的常见解决方案: 通常的产品或项目部署至服务器,服务一般会打印日志便于线上问题跟踪。 使用 Log4j 中的自定义 Appender,将服务运行打印的日志直接推送到 Kafka 中。经由 Logstash 消费 Kafka 生产的数据,进行加工过滤后输出到 ElasticSearch 进行日志数据的存储与全

    2023年04月08日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包