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

本文介绍了以下内容:
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 serverbin/zookeeper-server-start.sh config/zookeeper.properties# start kafka serverbin/kafka-server-start.sh config/server.properties2.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:2181describe topics 命令还可以获得特定topic的详细信息:
bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic sample2.6 创建生产者与消费者这里是本章的代码实战部分,利用kafka-python实现简单的生产者和消费者。
1.首先需要安装kafka-python:
pip install kafka-python2.创建消费者(consumer.py)
from kafka import kafkaconsumerconsumer = kafkaconsumer('sample')for message in consumer: print (message)3.创建生产者(producer.py)
有一个消费者正在订阅我们的消息流,因此我们要创建一个生产者,发布消息到kafka:
from kafka import kafkaproducerproducer = 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),你就会接收到生产者发送过来的消息。

2018年全球区块链专利百强发布:阿里第一,BAT、华为悉数到场
这四部华为手机才值得入手,持续降价,值得入手!
华为EMUI8.1及以上将全线支持UP1.0版本
尹志尧:中国造芯之路毁在人才上
压缩式压电传感器_压缩式压电传感器是什么
如何将Kafka使用到我们的后端设计中
网约车新政之后,你可以通过蓝牙智能钥匙来实现汽车共享
螺丝光学影像筛选机之机器视觉检测设备详情解析
利用电机控制中PLU模块与CTIMER计数器解码电机
买菜APP开发方案
Xilinx技术支持英国布里斯托大学打造 5G “超互联”城市社会
360发布首款智能音箱MAX 高品质是一条及格线
python对齐字符串的两种方法
面板厂争相发布屏下指纹成果 谁将笑傲2018?
iphone8什么时候上市?iphone8最新消息:iphone 8即将发布,ios11测试版泄密!苹果8确定将有无线充电这项新功能!
用于快充钠离子电池的多电子反应阴极
大功率光纤激光内孔熔覆装备开发及应用
神威太湖之光只能靠跑分“作秀”?其实有大作用
食品中亚硝酸盐检测仪的功能
电工常用电动机控制电路图集