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

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

3天内不再提示

一文读懂什么是分布式流处理系统Kafka

马哥Linux运维 2017-12-12 09:14 次阅读

什么是Kafka

Kafka是一个分布式流处理系统,流处理系统使它可以像消息队列一样publish或者subscribe消息,分布式提供了容错性,并发处理消息的机制。

Kafka的基本概念

kafka运行在集群上,集群包含一个或多个服务器。kafka把消息存在topic中,每一条消息包含键值(key),值(value)和时间戳(timestamp)。

kafka有以下一些基本概念:

Producer - 消息生产者,就是向kafka broker发消息的客户端。

Consumer - 消息消费者,是消息的使用方,负责消费Kafka服务器上的消息。

Topic - 主题,由用户定义并配置在Kafka服务器,用于建立Producer和Consumer之间的订阅关系。生产者发送消息到指定的Topic下,消息者从这个Topic下消费消息。

Partition - 消息分区,一个topic可以分为多个 partition,每个partition是一个有序的队列。partition中的每条消息都会被分配一个有序的id(offset)。

Broker - 一台kafka服务器就是一个broker。一个集群由多个broker组成。一个broker可以容纳多个topic。

Consumer Group - 消费者分组,用于归组同类消费者。每个consumer属于一个特定的consumer group,多个消费者可以共同消息一个Topic下的消息,每个消费者消费其中的部分消息,这些消费者就组成了一个分组,拥有同一个分组名称,通常也被称为消费者集群。

Offset - 消息在partition中的偏移量。每一条消息在partition都有唯一的偏移量,消息者可以指定偏移量来指定要消费的消息。

Kafka分布式架构

如上图所示,kafka将topic中的消息存在不同的partition中。如果存在键值(key),消息按照键值(key)做分类存在不同的partiition中,如果不存在键值(key),消息按照轮询(Round Robin)机制存在不同的partition中。默认情况下,键值(key)决定了一条消息会被存在哪个partition中。

partition中的消息序列是有序的消息序列。kafka在partition使用偏移量(offset)来指定消息的位置。一个topic的一个partition只能被一个consumer group中的一个consumer消费,多个consumer消费同一个partition中的数据是不允许的,但是一个consumer可以消费多个partition中的数据。

kafka将partition的数据复制到不同的broker,提供了partition数据的备份。每一个partition都有一个broker作为leader,若干个broker作为follower。所有的数据读写都通过leader所在的服务器进行,并且leader在不同broker之间复制数据。

上图中,对于Partition 0,broker 1是它的leader,broker 2和broker 3是follower。对于Partition 1,broker 2是它的leader,broker 1和broker 3是follower。

在上图中,当有Client(也就是Producer)要写入数据到Partition 0时,会写入到leader Broker 1,Broker 1再将数据复制到follower Broker 2和Broker 3。

在上图中,Client向Partition 1中写入数据时,会写入到Broker 2,因为Broker 2是Partition 1的Leader,然后Broker 2再将数据复制到follower Broker 1和Broker 3中。

上图中的topic一共有3个partition,对每个partition的读写都由不同的broker处理,因此总的吞吐量得到了提升。

实验一:kafka-python实现生产者消费者

kafka-python是一个python的Kafka客户端,可以用来向kafka的topic发送消息、消费消息。

这个实验会实现一个producer和一个consumer,producer向kafka发送消息,consumer从topic中消费消息。结构如下图

producer代码

consumer代码

接下来创建test topic

打开两个窗口中,我们在window1中运行producer,如下

在window2中运行consumer,如下

可以看到window2中的consumer成功的读到了producer写入的数据

实验二:消费组实现容错性机制

这个实验将展示消费组的容错性的特点。这个实验中将创建一个有2个partition的topic,和2个consumer,这2个consumer共同消费同一个topic中的数据。结构如下所示

producer部分代码和实验一相同,这里不再重复。consumer需要指定所属的consumer group,代码如下

接下来我们创建topic,名字test,设置partition数量为2

打开三个窗口,一个窗口运行producer,还有两个窗口运行consumer。

运行consumer的两个窗口的输出如下:

可以看到两个consumer同时运行的情况下,它们分别消费不同partition中的数据。window1中的consumer消费partition 0中的数据,window2中的consumer消费parition 1中的数据。

我们尝试关闭window1中的consumer,可以看到如下结果

刚开始window2中的consumer只消费partition1中的数据,当window1中的consumer退出后,window2中的consumer中也开始消费partition 0中的数据了。

实验三:offset管理

kafka允许consumer将当前消费的消息的offset提交到kafka中,这样如果consumer因异常退出后,下次启动仍然可以从上次记录的offset开始向后继续消费消息。

这个实验的结构和实验一的结构是一样的,使用一个producer,一个consumer,test topic的partition数量设为1。

producer的代码和实验一中的一样,这里不再重复。consumer的代码稍作修改,这里consumer中打印出下一个要被消费的消息的offset。consumer代码如下

在一个窗口中启动producer,在另一个窗口并且启动consumer。consumer的输出如下

可以尝试退出consumer,再启动consumer。每一次重新启动,consumer都是从offset=98的消息开始消费的。

修改consumer的代码如下,在consumer消费每一条消息后将offset提交回kafka

启动consumer

可以看到consumer从offset=98的消息开始消费,到offset=829时,我们Ctrl+C退出consumer。

我们再次启动consumer

可以看到重新启动后,consumer从上一次记录的offset开始继续消费消息。之后每一次consumer重新启动,consumer都会从上一次停止的地方继续开始消费。

本文主要介绍了一下kafka的基本概念,并结合一些实验帮助理解kafka中的一些难点,如多个consumer的容错性机制,offset管理。

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

    关注

    51

    文章

    4675

    浏览量

    83466
  • kafka
    +关注

    关注

    0

    文章

    48

    浏览量

    5158

原文标题:Python操作分布式流处理系统Kafka

文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    分布式软件系统

    分布式程序设计语言用于编写运行于分布式计算机系统上的分布式程序。分布式程序由若干个可以独立执行的程序模块组成,它们
    发表于 07-22 14:53

    分布式控制系统

    和集中控制的自动控制系统分布式控制系统采用微处理机分别控制各个回路,而用中小型工业控制计算机或高性能的微处理机实施上级的控制。各回路之间
    发表于 03-01 22:19

    LED分布式原理

    本帖最后由 eehome 于 2013-1-5 09:49 编辑 1. 分布式技术分布式就是:在各并联支路点均设立独立恒流源,从而管理、维持、控制支路与整体线路稳定。在使
    发表于 03-09 16:47

    分布式声波传感系统DAS

    发生干涉,干涉光反射回来以后,反向散射的干涉光回到信号处理装置,同时将光纤沿线振动声波信号带来信号处理装置。由于光速保持不变,因此可得到每米光纤的声波振动的测量结果。3、分布式光纤声波传感系统
    发表于 11-09 11:48

    如何设计分布式干扰系统

    什么是分布式干扰系统分布式干扰系统种综合化、体化、小型化、网络化和智能化
    发表于 08-08 06:57

    如何利用FPGA设计无线分布式采集系统

    的选择无线分布式采集来进行。现有的无线分布式采集系统中,往往使用单片机、DSP等作为系统的主控控制单元。但是由于其自身工作特点,往往对于精确的定时控制以及并行
    发表于 10-14 07:10

    读懂分布式架构知识体系(内含超全核心知识大图)

    和修改的能力,隔离性可以防止多个事务并发执行时,由于交叉执行而导致数据的不致;Durabilit:事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。分布式
    发表于 10-23 10:02

    分布式处理器的效率怎么提高?

    3和PSoC 5架构的分布式处理技术示例,该架构由个主CPU(在本例中为8051或ARM Cortex M3)、个DMA引擎、以及通用数字模块(UDB)阵列构成。UDB可高效用作
    发表于 11-07 07:01

    分布式系统的优势是什么?

    当讨论分布式系统时,我们面临许多以下这些形容词所描述的 同类型: 分布式的、删络的、并行的、并发的和分散的。分布式处理
    发表于 03-31 09:01

    分布式的优缺点是什么?

     分布式技术就是在需要恒的节点上串接,低压差线性恒驱动器。低压差很重要,关系到产品驱动效率。做到恒驱动有很多种,其中低压差线性恒
    发表于 04-01 09:03

    HarmonyOS鸿蒙操作系统之什么是“基于微内核的全场景分布式操作系统”?

    分布式:这个要提它对应的个词来看,就是集中式;分布式是负责处理系统资源和控制程序运行。它与集中式操作系统的区别在于资源管理、进程通信和
    发表于 09-23 17:06

    各种分布式电源的电气特性

    PS:渗透率的概念:从字面上理解,“渗透”就是由分布式电源发出的功率进入(渗入)到配电系统,所谓的“率”就是由分布式电源发出的电和整个系统所消耗的电(或者说总发电量)的
    发表于 07-12 07:54

    分布式操作系统的相关资料分享

    文章目录分布式操作系统嵌入操作系统集群操作系统集群系统管理
    发表于 12-22 07:23

    带你看懂分布式软总线在家庭场景的应用

    。HarmonyOS分布式软总线为此应运而生,为HarmonyOS分布式通信提供了可靠的解决方案,并通过系列简单的API接口服务于整个HarmonyOS系统
    发表于 01-06 11:32

    分布式测井曲线自动处理系统的实现

    本文介绍了分布式测井数据自动处理系统的研究与实现;详细介绍了测井曲线自动处理系统的模块与组成;论述了分布式并行数据处理,人机交互,神经网络算
    发表于 06-15 10:34 8次下载