kafka的基础知识及概念

介绍

kafka在过去几年获得了巨大的普及。在微服务架构中,它起着举足轻重的作用。它使数据能够从一项服务转移到另一项服务。我开始这个系列是为了帮助初学者深入了解 Kafka。但是,在我们深入之前,了解一些基础知识很重要。因此,在这篇文章中,我们将学习基础知识,并最终深入探讨。

基本

“Kafka 是一个高度可扩展、持久、容错的分布式流媒体平台。” 这是我们从Kafka官网看到的定义。这些行话可能会吓到新人。让我们先了解一下这些的含义。

高度可扩展:如果 Kafka 的传入消息不断增加,您可以通过向集群添加更多代理来扩展系统。您可以通过添加更多机器或通过添加更多磁盘空间来垂直扩展它。

耐用:耐用性是持续时间更长的能力。发送到 Kafka 主题的消息会保存在磁盘中。除非您将它们配置为删除,否则它们不会被删除。

容错:首先,容错是指系统在一个或多个节点发生故障时仍能运行的能力。在 Kafka 集群中,即使一个 broker 挂了,系统仍然可以运行,因为有复制。我们将在以后的帖子中了解这一点。

分布式流媒体平台:流是连续的流。在 Kafka 中,生产者生产消息,消费者消费。此流从未停止。这就是为什么我们称 Kafka 为流媒体平台。

简而言之,Kafka 在传统的客户端-服务器架构上工作。服务器是Kafka,生产者(发送数据的)和消费者(接收数据的)是客户端。客户端和服务器之间的通信通过Kafka 团队实现的定制高性能 TCP 协议进行。大多数编程语言都有许多可用的客户端库

事件

事件描述发生的事情。例如,在电子商务系统中,事件的例子可以是“订单已创建”、“商品已添加到购物车”、“订单已送达”。在 Kafka 中,我们以事件的形式读取或写入数据。事件数据的示例ORDER_CREATED如下所示。我们可以用 XML、JSON 或 Avro 发送这些数据。

{
  "order_id": "abcd-1234",
  "order_amount": "50.00",
  "created_by": "lokesh",
  "created_on": "2022-02-09T22:02:00Z"
}

基本架构

生产者是将数据“发送”到 Kafka 的实体。消费者是“消费”来自 Kafka 的数据的实体。在 Kafka 中,这两个实体都是松散耦合的。这意味着,生产者只生产而不管消费者的存在。同样,消费者的责任是在不依赖生产者的情况下消费来自 Kafka 的数据。

卡夫卡流程.png

主题和分区

事件按主题分类。主题包含相关信息。在设计数据管道时,主题是基于语义创建的。每个主题都有其意义和目的。例如,“支付”是接收支付相关事件的主题。每个主题分为多个分区。主题是 Kafka 中的逻辑实体,这意味着它在物理上不存在,而分区存在。当您创建一个包含“n”个分区的主题时,下面是幕后发生的事情。

  1. Kafka 创建了 ‘n’ 个名称为topic-1topic-2…的文件夹topic-n
  2. 在每个文件夹中,都会有存储事件的文件。

我们将在接下来的帖子中进入内部。现在,谈到分区,它是最小的存储单元和仅附加数据结构,其中事件附加到末尾。分区允许用户获得并行性。分区数越多,并行度越高。

kafka主题分区.png

分区键

当生产者向 Kafka broker 发送消息时,他们会去哪个分区?好吧,如果没有发送分区键,它们将转到一个随机分区。什么是分区键?它是发送时的可选参数,Kafka 确保具有相同分区键的消息写入同一个分区。让我们用下图来说明它。带有分区键“lokesh、john & kate”的消息被发送到partition 1。与其他键相同。在幕后,Kafka 计算分区键的哈希值,并对总分区应用模运算以获得分区。分区键解决了一些需要根据分区键聚合消息的用例。

分区键.png

消费者如何工作?

当您启动消费者时,会发生以下情况。

  1. 我们向消费者指定 Kafka 引导程序 URL(或 zookeeper URL,当提供 Kafka 代理时将自动发现)。
  2. 消费者打开与代理的 TCP 连接并注册自己。
  3. 消费者询问经纪人它在哪里,经纪人返回偏移量。Kafka 代理在一个名为__consumer_offsets.
  4. 消费者不断轮询并从偏移量开始消费消息。
  5. 消费者完成工作并将偏移量提交回代理。
  6. 消费者移动到下一条消息并且该过程继续。

如果您的消费者需要更多时间来处理每条消息,那么您可以将配置max.poll.interval.ms更改为更高的值。默认情况下,它设置为 5 分钟。您还可以调整max.poll.records,它指定消费者可以在单个轮询调用中获取的最大记录数。

抵消

在计算机科学中,维基百科对偏移量的定义如下。在 Kafka 的上下文中也是如此。它告诉消息位置。

偏移量是一个整数,指示对象的开始与给定元素或点之间的距离(位移),大概在同一对象内。

消费者群体

顾名思义,消费组就是一群消费者。每个消费者组都有一个名称。您可以拥有任意数量的消费者群体。当您启动一个消费者组时,它将向 Kafka 代理注册,这意味着该组中的所有消费者也将被注册。

卡夫卡消费者.png

与传统的发布-订阅系统的比较。

此外,如果您熟悉像 rabbitmq 这样的传统 pub-sub 消息传递系统,您可能会发现一些不同之处。

  1. 消息一旦被消费,就会从 rabbitmq 中删除。但是,在 Kafka 中,它们不会被删除。它们保存在磁盘中。这个特性使 Kafka 可以充当流媒体平台。
  2. 在 pub-sub 系统中,您不能让多个服务消费相同的数据,因为消息在被一个消费者消费后就会被删除。而在 Kafka 中,您可以使用多个服务。这为许多机会打开了大门,例如Kafka 流Kafka 连接
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
1/kafka是一个分布式的消息缓存系统 2/kafka集群中的服务器都叫做broker 3/kafka有两类客户端,一类叫producer(消息生产者),一类叫做consumer(消息消费者),客户端和broker服务器之间采用tcp协议连接 4/kafka中不同业务系统的消息可以通过topic进行区分,而且每一个消息topic都会被分区,以分担消息读写的负载 5/每一个分区都可以有多个副本,以防止数据的丢失 6/某一个分区中的数据如果需要更新,都必须通过该分区所有副本中的leader来更新 7/消费者可以分组,比如有两个消费者组A和B,共同消费一个topic:order_info,A和B所消费的消息不会重复 比如 order_info 中有100个消息,每个消息有一个id,编号从0-99,那么,如果A组消费0-49号,B组就消费50-99号 8/消费者在具体消费某个topic中的消息时,可以指定起始偏移量 每个partition只能同一个group中的同一个consumer消费,但多个Consumer Group可同时消费同一个partition。 n个topic可以被n个Consumer Group消费,每个Consumer Group有多个Consumer消费同一个topic Topic在逻辑上可以被认为是一个queue,每条消费都必须指定它的Topic,可以简单理解为必须指明把这条消息放进哪个queue里。为了使得Kafka的吞吐率可以线性提高,物理上把Topic分成一个或多个Partition,每个Partition在物理上对应一个文件夹,该文件夹下存储这个Partition的所有消息和索引文件。若创建topic1和topic2两个topic,且分别有13个和19个分区 Kafka的设计理念之一就是同时提供离线处理和实时处理。根据这一特性,可以使用Storm这种实时流处理系统对消息进行实时在线处理,同时使用Hadoop这种批处理系统进行离线处理,还可以同时将数据实时备份到另一个数据中心,只需要保证这三个操作所使用的Consumer属于不同的Consumer Group即可。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

youtian.L

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值