在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何將Kafka使用到我們的后端設(shè)計(jì)中

科技綠洲 ? 來源:Python實(shí)用寶典 ? 作者:Python實(shí)用寶典 ? 2023-10-30 14:30 ? 次閱讀

本文介紹了以下內(nèi)容:

1.什么是Kafka?

2.為什么我們需要使用Kafka這樣的消息系統(tǒng)及使用它的好處

3.如何將Kafka使用到我們的后端設(shè)計(jì)中。

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

1.Kafka是什么、為什么我們需要它?

簡(jiǎn)而言之,Kafka是一個(gè)分布式消息系統(tǒng)。這是什么意思呢?

想象一下,你現(xiàn)在有一個(gè)簡(jiǎn)單的Web應(yīng)用,其包含了網(wǎng)頁前端客戶端(Client)、服務(wù)端和數(shù)據(jù)庫(kù):

圖片

你需要記錄所有發(fā)生在你的Web應(yīng)用的事件,比如點(diǎn)擊、請(qǐng)求、搜索等,以便后續(xù)進(jìn)行計(jì)算和運(yùn)營(yíng)分析。

假設(shè)每個(gè)事件都由單獨(dú)的APP完成,那么一個(gè)簡(jiǎn)單的解決方案就是將數(shù)據(jù)存儲(chǔ)在數(shù)據(jù)庫(kù)中,所有APP連接到數(shù)據(jù)庫(kù)進(jìn)行存儲(chǔ):

圖片

這看起來簡(jiǎn)單,但是其中還會(huì)出現(xiàn)許多問題:

1.點(diǎn)擊、請(qǐng)求、搜索等事件會(huì)產(chǎn)生大量的數(shù)據(jù)到數(shù)據(jù)庫(kù)中,這可能會(huì)導(dǎo)致插入事件存在延遲。

2.如果選擇將高頻數(shù)據(jù)存儲(chǔ)在SQL或MongoDB等數(shù)據(jù)庫(kù)中,很難再原有歷史數(shù)據(jù)的基礎(chǔ)上擴(kuò)展數(shù)據(jù)庫(kù)。

3.如果你需要用這些數(shù)據(jù)進(jìn)行數(shù)據(jù)分析,你可能無法直接對(duì)數(shù)據(jù)庫(kù)進(jìn)行高頻率的讀取操作。

4.每個(gè)APP可以遵循自己的數(shù)據(jù)格式,這就意味著當(dāng)你需要在不同的APP進(jìn)行數(shù)據(jù)交換時(shí),你需要進(jìn)行數(shù)據(jù)格式的轉(zhuǎn)換。

通過使用像Kafka這樣的消息流系統(tǒng),可以很好地解決這些問題,因?yàn)樗麄兛梢詧?zhí)行以下操作:

1.存儲(chǔ)的大量數(shù)據(jù)可以被持久化、校驗(yàn)和復(fù)制,具備容錯(cuò)能力。

2.支持跨系統(tǒng)實(shí)時(shí)處理連續(xù)的數(shù)據(jù)流。

3.允許APP獨(dú)立發(fā)布數(shù)據(jù)或數(shù)據(jù)流,并與使用它的APP無關(guān)。

那么它和傳統(tǒng)數(shù)據(jù)庫(kù)有何不同?

盡管Kafka可以持久化地存儲(chǔ)數(shù)據(jù),但它不是數(shù)據(jù)庫(kù)。

Kafka不僅允許APP存儲(chǔ)或提取連續(xù)的數(shù)據(jù)流,還支持實(shí)時(shí)處理。這與對(duì)被動(dòng)數(shù)據(jù)執(zhí)行CRUD操作或?qū)鹘y(tǒng)數(shù)據(jù)庫(kù)執(zhí)行查詢的方式不同。

聽起來不錯(cuò),那么Kafka是如何解決以上挑戰(zhàn)的?

Kafka是一個(gè)分布式平臺(tái),是為規(guī)模而構(gòu)建的,這意味著它可以處理高頻率的讀寫和存儲(chǔ)大量數(shù)據(jù)。它確保數(shù)據(jù)始終可靠。它還支持從故障中恢復(fù)的強(qiáng)大機(jī)制。

以下是為什么應(yīng)該使用Kafka的一些關(guān)鍵因素:

1.1 簡(jiǎn)化后端架構(gòu)

在Kafka的幫助下,我們前面的結(jié)構(gòu)會(huì)變得簡(jiǎn)單一些:

圖片

1.2 通用數(shù)據(jù)管道

如上所示,Kafka充當(dāng)多個(gè)APP和服務(wù)的通用數(shù)據(jù)管道,這給了我們兩個(gè)好處:

1.數(shù)據(jù)是集成的,我們將來自不同系統(tǒng)的數(shù)據(jù)都存在一個(gè)地方,這使得Kafka成為真正的數(shù)據(jù)源。任何APP都可以將數(shù)據(jù)推送到該平臺(tái),然后由另一個(gè)APP提取數(shù)據(jù)。

2.Kafka使得應(yīng)用程序之間交換數(shù)據(jù)變得容易。因?yàn)槲覀兛梢詷?biāo)準(zhǔn)化數(shù)據(jù)格式,減少了數(shù)據(jù)格式的轉(zhuǎn)換。

1.3 通用連接性

盡管Kafka允許你使用標(biāo)準(zhǔn)數(shù)據(jù)格式,但并不意味著你的APP就不需要數(shù)據(jù)轉(zhuǎn)換了,它只是減少了我們轉(zhuǎn)換數(shù)據(jù)的頻率罷了。

此外,Kafka提供了一個(gè)叫 Kafka Connect 的框架允許我們維護(hù)遺留的老系統(tǒng)。

1.4 實(shí)時(shí)數(shù)據(jù)處理

類似于監(jiān)控系統(tǒng)這樣的實(shí)時(shí)APP,往往需要連續(xù)的數(shù)據(jù)流,這些數(shù)據(jù)需要被立即處理或盡量減少延遲處理。

Kafka的流式處理,使得處理引擎可以在很短的時(shí)間內(nèi)(幾毫米到幾分鐘)內(nèi)取數(shù)、分析、以及響應(yīng)。

2.Kafka入門

2.1 安裝

安裝Kafka是一個(gè)相當(dāng)簡(jiǎn)單的過程。只需遵循以下給定步驟:

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 啟動(dòng)服務(wù)器

ZooKeeper是一個(gè)針對(duì)Kafka等分布式環(huán)境的集中管理工具,它為大型分布式系統(tǒng)提供配置服務(wù)、同步服務(wù)及命名注冊(cè)表。

因此,我們需要先啟動(dòng)ZooKeeper服務(wù)器,然后再啟動(dòng)Kafka服務(wù)器。使用以下命令即可:

# 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體系結(jié)構(gòu)的核心概念:

1.Kafka在一個(gè)或多個(gè)服務(wù)器上作為集群運(yùn)行。

2.Kafka將數(shù)據(jù)流存儲(chǔ)在名為topics的類別中。每條數(shù)據(jù)均由鍵、值、時(shí)間戳組成。

3.Kafka使用發(fā)布-訂閱模式。它允許某些APP充當(dāng)producers(生產(chǎn)者),記錄數(shù)據(jù)并將數(shù)據(jù)發(fā)布到Kafka topic中。

同樣,它允許某些APP充當(dāng)consumer(消費(fèi)者)和訂閱Kafka topic并處理由它產(chǎn)生的數(shù)據(jù)。

4.除了Prodcuer API 和 Consumer API,Kafka還為應(yīng)用提供了一個(gè) Streams API 作為流處理器。通過 Connector API 我們可以將Kafka連接到其他現(xiàn)有的應(yīng)用程序和數(shù)據(jù)系統(tǒng)。

2.4 架構(gòu)

圖片

如你所見,每個(gè)Kafka的 Topic 可以分為多個(gè)Partition(分區(qū)),可以使用broker(經(jīng)紀(jì)人)在不同的計(jì)算機(jī)上復(fù)制這些 Topic,從而使消費(fèi)者可以并行讀取 Topic.

kafka的復(fù)制是針對(duì)分區(qū)的:

圖片

比如上圖中有4個(gè)broker, 1個(gè)topic, 2個(gè)分區(qū),復(fù)制因子是3。當(dāng)producer發(fā)送一個(gè)消息的時(shí)候,它會(huì)選擇一個(gè)分區(qū),比如topic1-part1分區(qū),將消息發(fā)送給這個(gè)分區(qū)的leader, broker2、broker3會(huì)拉取這個(gè)消息,一旦消息被拉取過來,slave會(huì)發(fā)送ack給master,這時(shí)候master才commit這個(gè)log。

因此,整個(gè)系統(tǒng)的容錯(cuò)級(jí)別極高。當(dāng)系統(tǒng)正常運(yùn)行時(shí),對(duì)Topic的所有讀取和寫入都將通過leader,且leader會(huì)保證所有其他broker均被更新。

如果Broker失效了,系統(tǒng)會(huì)自動(dòng)重新配置,此時(shí)副本也可以接管成為L(zhǎng)eader.

2.5 創(chuàng)建Kafka Topic

讓我們創(chuàng)建一個(gè)名為 sample,含有一個(gè)partition(分區(qū))和一個(gè)replica(副本)的Kafka Topic:

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

列出所有的Kafka Topics,檢查是否成功創(chuàng)建了sample Topic:

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

describe topics 命令還可以獲得特定Topic的詳細(xì)信息

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

2.6 創(chuàng)建生產(chǎn)者與消費(fèi)者

這里是本章的代碼實(shí)戰(zhàn)部分,利用Kafka-Python實(shí)現(xiàn)簡(jiǎn)單的生產(chǎn)者和消費(fèi)者。

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

pip install kafka-python

2.創(chuàng)建消費(fèi)者(consumer.py)

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

3.創(chuàng)建生產(chǎn)者(producer.py)

有一個(gè)消費(fèi)者正在訂閱我們的消息流,因此我們要?jiǎng)?chuàng)建一個(gè)生產(chǎn)者,發(fā)布消息到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')

現(xiàn)在,你重新運(yùn)行消費(fèi)者(consumer.py),你就會(huì)接收到生產(chǎn)者發(fā)送過來的消息。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 存儲(chǔ)
    +關(guān)注

    關(guān)注

    13

    文章

    4337

    瀏覽量

    85992
  • 數(shù)據(jù)庫(kù)
    +關(guān)注

    關(guān)注

    7

    文章

    3839

    瀏覽量

    64542
  • 服務(wù)端
    +關(guān)注

    關(guān)注

    0

    文章

    66

    瀏覽量

    7025
  • Web應(yīng)用
    +關(guān)注

    關(guān)注

    0

    文章

    16

    瀏覽量

    3510
  • kafka
    +關(guān)注

    關(guān)注

    0

    文章

    51

    瀏覽量

    5227
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    探討如何將機(jī)器學(xué)習(xí)應(yīng)用到物聯(lián)網(wǎng)

    本項(xiàng)目探討如何將機(jī)器學(xué)習(xí)(Machine learning)應(yīng)用到物聯(lián)網(wǎng)(IoT,Internet of Things)。我們將使用 Android Things 作為
    的頭像 發(fā)表于 05-23 09:24 ?9028次閱讀

    如何將LCD運(yùn)用到低通濾波電路里

    本帖最后由 klysa 于 2011-11-2 17:28 編輯 如題如何將LCD運(yùn)用到低通濾波電路里
    發(fā)表于 11-02 17:28

    如何將DRIVEDONE屬性傳播到我的mcs文件生成?

    我正在使用Kintex-7部分,由于某種原因(尚未完全研究),我必須將BITSTREAM.CONFIG.DRIVEDONE屬性設(shè)置為yes以便能夠位文件加載到FPGA?,F(xiàn)在我遇到了編程SPI PROM的問題 - 表明完成的引腳沒有變高。
    發(fā)表于 06-04 07:29

    請(qǐng)問如何將Swift語言應(yīng)用到MCU開發(fā)?

    請(qǐng)問如何將Swift語言應(yīng)用到MCU開發(fā)?
    發(fā)表于 02-11 07:30

    如何將UDESTK的調(diào)試屏幕添加到我的SPC5上呢

    我找不到如何將 UDESTK 的調(diào)試屏幕添加到我的 SPC5,你能給我建議正確的方法嗎?
    發(fā)表于 12-20 07:02

    如何將RAFL添加到我的項(xiàng)目的適當(dāng)示例和/或文檔?

    我無法找到有關(guān)如何將 RAFL 添加到我的項(xiàng)目的適當(dāng)示例和/或文檔。查看 RFAL 的 rfal.chm 文件有一個(gè)示例,但它對(duì)我不起作用?當(dāng)我查看 X-CUBE-NFC5.chm 時(shí),應(yīng)該有 4
    發(fā)表于 01-10 06:02

    IDE如何將外圍頭文件包含在我的項(xiàng)目中并連接到我的項(xiàng)目?

    我正在使用系統(tǒng)工作臺(tái) IDE。我想包括一些外圍頭文件,如 LCD 16x2 。請(qǐng)告訴我如何將這些文件包含在我的項(xiàng)目中并連接到我的項(xiàng)目?
    發(fā)表于 02-07 08:17

    如何將ESP32置于認(rèn)證過程所需的模式?

    二進(jìn)制形式提供 FCC 測(cè)試軟件。我已經(jīng)聯(lián)系 Espressif 看我是否可以獲得源代碼或二進(jìn)制庫(kù),以便我可以將其合并到我們的測(cè)試代碼,他們回答說不會(huì)提供代碼。有誰知道如何將 ESP32 置于認(rèn)證過程所需的模式
    發(fā)表于 03-01 08:03

    如何將MCU應(yīng)用到FPGA:關(guān)于FPGA(1)

    最近,我接手一個(gè)項(xiàng)目,這個(gè)項(xiàng)目不僅要求我使用FPGA,而且還要求我使用功能更強(qiáng)大的ARM。這都是我從未接觸過的領(lǐng)域。在這個(gè)系列博客,我介紹我是如何將自己現(xiàn)有的MCU知識(shí)和經(jīng)驗(yàn)運(yùn)用到
    發(fā)表于 05-08 15:41 ?3930次閱讀

    如何將物聯(lián)網(wǎng)數(shù)據(jù)從設(shè)備連接到Kafka集群?

    Apache Kafka是一個(gè)實(shí)時(shí)流平臺(tái),在大大小小的組織得到了廣泛的采用。Kafka的分布式微服務(wù)架構(gòu)和發(fā)布/訂閱協(xié)議使得它非常適合在企業(yè)系統(tǒng)和應(yīng)用程序之間實(shí)時(shí)移動(dòng)數(shù)據(jù)。據(jù)統(tǒng)計(jì),超過三分之一
    發(fā)表于 07-20 09:10 ?2161次閱讀

    如何將物聯(lián)網(wǎng)數(shù)據(jù)從設(shè)備連接到Kafka集群?

    在與HiveMQ客戶的對(duì)話,一些操作集群具有數(shù)百萬臺(tái)設(shè)備和非常高的消息吞吐量,我們看到需要為Kafka創(chuàng)建MQTT代理擴(kuò)展。我們的客戶希望從MQTT和
    發(fā)表于 07-28 11:53 ?1445次閱讀

    如何將轉(zhuǎn)換器設(shè)計(jì)指標(biāo)應(yīng)用到 Fly-Buck 電路設(shè)計(jì)

    本博客共分兩個(gè)部分,第 1 部分我們探討了使 Fly-Buck 設(shè)計(jì)穩(wěn)定所需的重要設(shè)計(jì)指標(biāo)。本文我們介紹如何將這些設(shè)計(jì)指標(biāo)應(yīng)用到 Fly-
    的頭像 發(fā)表于 01-28 09:24 ?1548次閱讀
    <b class='flag-5'>如何將</b>轉(zhuǎn)換器設(shè)計(jì)指標(biāo)應(yīng)<b class='flag-5'>用到</b> Fly-Buck 電路設(shè)計(jì)<b class='flag-5'>中</b>

    如何將大模型應(yīng)用到效能評(píng)估系統(tǒng)中去

    維度對(duì)應(yīng)用數(shù)據(jù)進(jìn)行評(píng)估,從而對(duì)應(yīng)用的效能產(chǎn)生評(píng)估,進(jìn)而獲得量化評(píng)估應(yīng)用的效能水平的總分?jǐn)?shù)。 智慧華盛恒輝效能評(píng)估系統(tǒng)大模型應(yīng)用到效能評(píng)估系統(tǒng)是一項(xiàng)具有挑戰(zhàn)性的任務(wù)。首先,我們需要考
    的頭像 發(fā)表于 09-27 16:16 ?537次閱讀

    如何將1-Wire主機(jī)復(fù)用到多個(gè)通道?

    如何將1-Wire主機(jī)復(fù)用到多個(gè)通道? 1-Wire是一種串行通信協(xié)議,可用于連接各種感測(cè)器和芯片,如溫度傳感器、濕度傳感器、EEPROM等。通常情況下,每個(gè)1-Wire主機(jī)(例如單片機(jī))只能連接一
    的頭像 發(fā)表于 10-29 14:21 ?616次閱讀

    Standard cell是怎么應(yīng)用到我們后端設(shè)計(jì)的呢?

    Standard cell,標(biāo)準(zhǔn)單元,或者簡(jiǎn)稱cell,可以說是數(shù)字芯片后端最基本的概念之一了,甚至可能沒有接觸過后端的同學(xué)也有所耳聞?
    的頭像 發(fā)表于 12-04 11:44 ?1078次閱讀
    主站蜘蛛池模板: 久草亚洲视频| 欧美精品人爱a欧美精品| 久精品视频村上里沙| 嫩草影院www| 色九九| 色秀网站| 久久婷婷影院| 免费看va| 国产精品国产三级国快看| www.99色| 沟沟人体一区二区| 中文日产国产精品久久| 天天操人人爱| 8天堂资源在线| 大美女久久久久久j久久| 日日夜夜2017| 天天狠天天天天透在线| 开心色99xxxx开心色| 啪啪午夜免费| 好黄好硬好爽好刺激| 日本在线视频二区| 日本a级特黄三级三级三级| 最新版天堂资源中文官网| 亚洲一区二区三区网站| 能在线观看的一区二区三区| 伊伊成人网| 欧美爽爽网| 免费在线欧美| 丁香六月五月婷婷| 日日爽夜夜| 酒色成人网| 午夜欧美性欧美| 亚洲爱爱网站| 九色在线看| 天天干狠狠干| 777色淫网站女女免费| 午夜性视频播放免费视频| 一级片视频在线| 四虎永久精品免费观看| 色伊人网| 国产精品igao在线观看樱花日本|