0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何将Kafka使用到我们的后端设计中

科技绿洲 来源:Python实用宝典 作者:Python实用宝典 2023-10-30 14:30 次阅读

本文介绍了以下内容:

1.什么是Kafka?

2.为什么我们需要使用Kafka这样的消息系统及使用它的好处

3.如何将Kafka使用到我们的后端设计中。

译自timber.io:《hello-world-in-kafka-using-python》,有部分删改。

1.Kafka是什么、为什么我们需要它?

简而言之,Kafka是一个分布式消息系统。这是什么意思呢?

想象一下,你现在有一个简单的Web应用,其包含了网页前端客户端(Client)、服务端和数据库:

图片

你需要记录所有发生在你的Web应用的事件,比如点击、请求、搜索等,以便后续进行计算和运营分析。

假设每个事件都由单独的APP完成,那么一个简单的解决方案就是将数据存储在数据库中,所有APP连接到数据库进行存储:

图片

这看起来简单,但是其中还会出现许多问题:

1.点击、请求、搜索等事件会产生大量的数据到数据库中,这可能会导致插入事件存在延迟。

2.如果选择将高频数据存储在SQL或MongoDB等数据库中,很难再原有历史数据的基础上扩展数据库。

3.如果你需要用这些数据进行数据分析,你可能无法直接对数据库进行高频率的读取操作。

4.每个APP可以遵循自己的数据格式,这就意味着当你需要在不同的APP进行数据交换时,你需要进行数据格式的转换。

通过使用像Kafka这样的消息流系统,可以很好地解决这些问题,因为他们可以执行以下操作:

1.存储的大量数据可以被持久化、校验和复制,具备容错能力。

2.支持跨系统实时处理连续的数据流。

3.允许APP独立发布数据或数据流,并与使用它的APP无关。

那么它和传统数据库有何不同?

尽管Kafka可以持久化地存储数据,但它不是数据库。

Kafka不仅允许APP存储或提取连续的数据流,还支持实时处理。这与对被动数据执行CRUD操作或对传统数据库执行查询的方式不同。

听起来不错,那么Kafka是如何解决以上挑战的?

Kafka是一个分布式平台,是为规模而构建的,这意味着它可以处理高频率的读写和存储大量数据。它确保数据始终可靠。它还支持从故障中恢复的强大机制。

以下是为什么应该使用Kafka的一些关键因素:

1.1 简化后端架构

在Kafka的帮助下,我们前面的结构会变得简单一些:

图片

1.2 通用数据管道

如上所示,Kafka充当多个APP和服务的通用数据管道,这给了我们两个好处:

1.数据是集成的,我们将来自不同系统的数据都存在一个地方,这使得Kafka成为真正的数据源。任何APP都可以将数据推送到该平台,然后由另一个APP提取数据。

2.Kafka使得应用程序之间交换数据变得容易。因为我们可以标准化数据格式,减少了数据格式的转换。

1.3 通用连接性

尽管Kafka允许你使用标准数据格式,但并不意味着你的APP就不需要数据转换了,它只是减少了我们转换数据的频率罢了。

此外,Kafka提供了一个叫 Kafka Connect 的框架允许我们维护遗留的老系统。

1.4 实时数据处理

类似于监控系统这样的实时APP,往往需要连续的数据流,这些数据需要被立即处理或尽量减少延迟处理。

Kafka的流式处理,使得处理引擎可以在很短的时间内(几毫米到几分钟)内取数、分析、以及响应。

2.Kafka入门

2.1 安装

安装Kafka是一个相当简单的过程。只需遵循以下给定步骤:

1.下载最新的1.1.0版本的Kafka

2.使用以下命令解压缩下载文件: tar -xzf kafka_2.11-1.1.0.tgz

3.cd到Kafka目录开始使用它: cd kafka_2.11-1.1.0

2.2 启动服务器

ZooKeeper是一个针对Kafka等分布式环境的集中管理工具,它为大型分布式系统提供配置服务、同步服务及命名注册表。

因此,我们需要先启动ZooKeeper服务器,然后再启动Kafka服务器。使用以下命令即可:

# Start ZooKeeper Server
bin/zookeeper-server-start.sh config/zookeeper.properties


# Start Kafka Server
bin/kafka-server-start.sh config/server.properties

2.3 Kafka 基本概念

我们快速介绍一下Kafka体系结构的核心概念:

1.Kafka在一个或多个服务器上作为集群运行。

2.Kafka将数据流存储在名为topics的类别中。每条数据均由键、值、时间戳组成。

3.Kafka使用发布-订阅模式。它允许某些APP充当producers(生产者),记录数据并将数据发布到Kafka topic中。

同样,它允许某些APP充当consumer(消费者)和订阅Kafka topic并处理由它产生的数据。

4.除了Prodcuer API 和 Consumer API,Kafka还为应用提供了一个 Streams API 作为流处理器。通过 Connector API 我们可以将Kafka连接到其他现有的应用程序和数据系统。

2.4 架构

图片

如你所见,每个Kafka的 Topic 可以分为多个Partition(分区),可以使用broker(经纪人)在不同的计算机上复制这些 Topic,从而使消费者可以并行读取 Topic.

kafka的复制是针对分区的:

图片

比如上图中有4个broker, 1个topic, 2个分区,复制因子是3。当producer发送一个消息的时候,它会选择一个分区,比如topic1-part1分区,将消息发送给这个分区的leader, broker2、broker3会拉取这个消息,一旦消息被拉取过来,slave会发送ack给master,这时候master才commit这个log。

因此,整个系统的容错级别极高。当系统正常运行时,对Topic的所有读取和写入都将通过leader,且leader会保证所有其他broker均被更新。

如果Broker失效了,系统会自动重新配置,此时副本也可以接管成为Leader.

2.5 创建Kafka Topic

让我们创建一个名为 sample,含有一个partition(分区)和一个replica(副本)的Kafka Topic:

bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic sample

列出所有的Kafka Topics,检查是否成功创建了sample Topic:

bin/kafka-topics.sh --list --zookeeper localhost:2181

describe topics 命令还可以获得特定Topic的详细信息

bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic sample

2.6 创建生产者与消费者

这里是本章的代码实战部分,利用Kafka-Python实现简单的生产者和消费者。

1.首先需要安装kafka-python:

pip install kafka-python

2.创建消费者(consumer.py)

from kafka import KafkaConsumer
consumer = KafkaConsumer('sample')
for message in consumer:
    print (message)

3.创建生产者(producer.py)

有一个消费者正在订阅我们的消息流,因此我们要创建一个生产者,发布消息到Kafka:

from kafka import KafkaProducer
producer = KafkaProducer(bootstrap_servers='localhost:9092')
producer.send('sample', b'Hello, World!')
producer.send('sample', key=b'message-two', value=b'This is Kafka-Python')

现在,你重新运行消费者(consumer.py),你就会接收到生产者发送过来的消息。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 存储
    +关注

    关注

    13

    文章

    4303

    浏览量

    85818
  • 数据库
    +关注

    关注

    7

    文章

    3798

    浏览量

    64370
  • 服务端
    +关注

    关注

    0

    文章

    66

    浏览量

    7007
  • Web应用
    +关注

    关注

    0

    文章

    16

    浏览量

    3475
  • kafka
    +关注

    关注

    0

    文章

    51

    浏览量

    5216
收藏 人收藏

    评论

    相关推荐

    探讨如何将机器学习应用到物联网

    本项目探讨如何将机器学习(Machine learning)应用到物联网(IoT,Internet of Things)我们将使用 Android Things 作为
    的头像 发表于 05-23 09:24 8999次阅读

    如何将LCD运用到低通滤波电路里

    本帖最后由 klysa 于 2011-11-2 17:28 编辑 如题如何将LCD运用到低通滤波电路里
    发表于 11-02 17:28

    如何将DRIVEDONE属性传播到我的mcs文件生成?

    我正在使用Kintex-7部分,由于某种原因(尚未完全研究),我必须将BITSTREAM.CONFIG.DRIVEDONE属性设置为yes以便能够位文件加载到FPGA。现在我遇到了编程SPI PROM的问题 - 表明完成的引脚没有变高。
    发表于 06-04 07:29

    请问如何将Swift语言应用到MCU开发

    请问如何将Swift语言应用到MCU开发
    发表于 02-11 07:30

    如何将UDESTK的调试屏幕添加到我的SPC5上呢

    我找不到如何将 UDESTK 的调试屏幕添加到我的 SPC5,你能给我建议正确的方法吗?
    发表于 12-20 07:02

    如何将RAFL添加到我的项目的适当示例和/或文档?

    我无法找到有关如何将 RAFL 添加到我的项目的适当示例和/或文档。查看 RFAL 的 rfal.chm 文件有一个示例,但它对我不起作用?当我查看 X-CUBE-NFC5.chm 时,应该有 4
    发表于 01-10 06:02

    IDE如何将外围头文件包含在我的项目中并连接到我的项目?

    我正在使用系统工作台 IDE。我想包括一些外围头文件,如 LCD 16x2 。请告诉我如何将这些文件包含在我的项目中并连接到我的项目?
    发表于 02-07 08:17

    如何将ESP32置于认证过程所需的模式

    二进制形式提供 FCC 测试软件。我已经联系 Espressif 看我是否可以获得源代码或二进制库,以便我可以将其合并到我们的测试代码,他们回答说不会提供代码。有谁知道如何将 ESP32 置于认证过程所需的模式
    发表于 03-01 08:03

    如何将MCU应用到FPGA:关于FPGA(1)

    最近,我接手一个项目,这个项目不仅要求我使用FPGA,而且还要求我使用功能更强大的ARM。这都是我从未接触过的领域。在这个系列博客,我介绍我是如何将自己现有的MCU知识和经验运用到
    发表于 05-08 15:41 3914次阅读

    如何将物联网数据从设备连接到Kafka集群?

    Apache Kafka是一个实时流平台,在大大小小的组织得到了广泛的采用。Kafka的分布式微服务架构和发布/订阅协议使得它非常适合在企业系统和应用程序之间实时移动数据。据统计,超过三分之一
    发表于 07-20 09:10 2142次阅读

    如何将物联网数据从设备连接到Kafka集群?

    在与HiveMQ客户的对话,一些操作集群具有数百万台设备和非常高的消息吞吐量,我们看到需要为Kafka创建MQTT代理扩展。我们的客户希望从MQTT和
    发表于 07-28 11:53 1435次阅读

    如何将转换器设计指标应用到 Fly-Buck 电路设计

    本博客共分两个部分,第 1 部分我们探讨了使 Fly-Buck 设计稳定所需的重要设计指标。本文我们介绍如何将这些设计指标应用到 Fly-
    的头像 发表于 01-28 09:24 1525次阅读
    <b class='flag-5'>如何将</b>转换器设计指标应<b class='flag-5'>用到</b> Fly-Buck 电路设计<b class='flag-5'>中</b>

    如何将大模型应用到效能评估系统中去

    维度对应用数据进行评估,从而对应用的效能产生评估,进而获得量化评估应用的效能水平的总分数。 智慧华盛恒辉效能评估系统大模型应用到效能评估系统是一项具有挑战性的任务。首先,我们需要考
    的头像 发表于 09-27 16:16 525次阅读

    如何将1-Wire主机复用到多个通道?

    如何将1-Wire主机复用到多个通道? 1-Wire是一种串行通信协议,可用于连接各种感测器和芯片,如温度传感器、湿度传感器、EEPROM等。通常情况下,每个1-Wire主机(例如单片机)只能连接一
    的头像 发表于 10-29 14:21 588次阅读

    Standard cell是怎么应用到我们后端设计的呢?

    Standard cell,标准单元,或者简称cell,可以说是数字芯片后端最基本的概念之一了,甚至可能没有接触过后端的同学也有所耳闻?
    的头像 发表于 12-04 11:44 1002次阅读