• 0
  • 0
分享
  • Kafka架构以及应用场景——软件测试圈
  • 饼干 2024-05-31 16:20:43 字数 2760 阅读 522 收藏 0

  一、Kafka介绍

  Kafka是最初由Linkedin公司开发,是一个分布式、分区的、多副本的、多生产者、多订阅者,基于 zookeeper协调的分布式日志系统(也可以当做MQ系统),常见可以用于web/nginx日志、访问日志, 消息服务等等,Linkedin于2010年贡献给了Apache基金会并成为顶级开源项目。

  主要应用场景是:日志收集系统和消息系统。

  Kafka主要设计目标如下:

  ·以时间复杂度为O(1)的方式提供消息持久化能力,即使对TB级以上数据也能保证常数时间的访 问性能。

  · 高吞吐率。即使在非常廉价的商用机器上也能做到单机支持每秒100K条消息的传输。

  · 支持Kafka Server间的消息分区,及分布式消费,同时保证每个partition内的消息顺序传输。

  · 同时支持离线数据处理和实时数据处理。

  · 支持在线水平扩展。

1-1.png

  有两种主要的消息传递模式:点对点传递模式、发布-订阅模式。大部分的消息系统选用发布-订阅 模式。

  Kafka就是一种发布-订阅模式。 对于消息中间件,消息分推拉两种模式。Kafka只有消息的拉取,没有推送,可以通过轮询实现消息的推送。

  1. Kafka在一个或多个可以跨越多个数据中心的服务器上作为集群运行。

  2. Kafka集群中按照主题分类管理,一个主题可以有多个分区,一个分区可以有多个副本分区。

  3. 每个记录由一个键,一个值和一个时间戳组成。

  Kafka具有四个核心API:

  1. Producer API:允许应用程序将记录流发布到一个或多个Kafka主题。

  2. Consumer API:允许应用程序订阅一个或多个主题并处理为其生成的记录流。

  3. Streams API:允许应用程序充当流处理器,使用一个或多个主题的输入流,并生成一个或多个输出主题的输出流,从而有效地将输入流转换为输出流。

  4. Connector API:允许构建和运行将Kafka主题连接到现有应用程序或数据系统的可重用生产者 或使用者。例如,关系数据库的连接器可能会捕获对表的所有更改。

  二、Kafka优势

  1. 高吞吐量:单机每秒处理几十上百万的消息量。即使存储了许多TB的消息,它也保持稳定的性 能。

  2. 高性能:单节点支持上千个客户端,并保证零停机和零数据丢失。

  3. 持久化数据存储:将消息持久化到磁盘。通过将数据持久化到硬盘以及replication防止数据丢 失。 1. 零拷贝 2. 顺序读,顺序写 3. 利用Linux的页缓存

  4. 分布式系统,易于向外扩展。所有的Producer、Broker和Consumer都会有多个,均为分布式 的。无需停机即可扩展机器。多个Producer、Consumer可能是不同的应用。

  5. 可靠性 - Kafka是分布式,分区,复制和容错的。

  6. 客户端状态维护:消息被处理的状态是在Consumer端维护,而不是由server端维护。当失败 时能自动平衡。

  7. 支持online和offline的场景。

  8. 支持多种客户端语言。Kafka支持Java、.NET、PHP、Python等多种语言。

  三、Kafka应用场景

  日志收集:一个公司可以用Kafka可以收集各种服务的Log,通过Kafka以统一接口服务的方式开放 给各种Consumer;

  消息系统:解耦生产者和消费者、缓存消息等;

  用户活动跟踪:Kafka经常被用来记录Web用户或者App用户的各种活动,如浏览网页、搜索、点击 等活动,这些活动信息被各个服务器发布到Kafka的Topic中,然后消费者通过订阅这些Topic来做实时的 监控分析,亦可保存到数据库;

  运营指标:Kafka也经常用来记录运营监控数据。包括收集各种分布式应用的数据,生产各种操作的 集中反馈,比如报警和报告;

   流式处理:比如Spark Streaming和Storm。

  四、Kafka基础架构

  消息和批次

  Kafka的数据单元称为消息。可以把消息看成是数据库里的一个“数据行”或一条“记录”。消息由字节 数组组成。 消息有键,键也是一个字节数组。当消息以一种可控的方式写入不同的分区时,会用到键。 为了提高效率,消息被分批写入Kafka。批次就是一组消息,这些消息属于同一个主题和分区。 把消息分成批次可以减少网络开销。批次越大,单位时间内处理的消息就越多,单个消息的传输时 间就越长。批次数据会被压缩,这样可以提升数据的传输和存储能力,但是需要更多的计算处理。

  模式

  消息模式(schema)有许多可用的选项,以便于理解。如JSON和XML,但是它们缺乏强类型处理 能力。Kafka的许多开发者喜欢使用Apache Avro。Avro提供了一种紧凑的序列化格式,模式和消息体分 开。当模式发生变化时,不需要重新生成代码,它还支持强类型和模式进化,其版本既向前兼容,也向 后兼容。 数据格式的一致性对Kafka很重要,因为它消除了消息读写操作之间的耦合性。

  主题和分区

  Kafka的消息通过主题进行分类。主题可比是数据库的表或者文件系统里的文件夹。主题可以被分为 若干分区,一个主题通过分区分布于Kafka集群中,提供了横向扩展的能力。

1-2.png

  生产者和消费者

  生产者创建消息。消费者消费消息。 一个消息被发布到一个特定的主题上。 生产者在默认情况下把消息均衡地分布到主题的所有分区上:

  1. 直接指定消息的分区

  2. 根据消息的key散列取模得出分区

  3. 轮询指定分区。

  消费者通过偏移量来区分已经读过的消息,从而消费消息。 消费者是消费组的一部分。消费组保证每个分区只能被一个消费者使用,避免重复消费。

1-3.png

  broker和集群

  一个独立的Kafka服务器称为broker。broker接收来自生产者的消息,为消息设置偏移量,并提交 消息到磁盘保存。broker为消费者提供服务,对读取分区的请求做出响应,返回已经提交到磁盘上的消 息。单个broker可以轻松处理数千个分区以及每秒百万级的消息量。

1-4.png

  每个集群都有一个broker是集群控制器(自动从集群的活跃成员中选举出来)。 控制器负责管理工作:

  ·将分区分配给broker

  · 监控broker

  集群中一个分区属于一个broker,该broker称为分区首领。 一个分区可以分配给多个broker,此时会发生分区复制。 分区的复制提供了消息冗余,高可用。副本分区不负责处理消息的读写。


作者:日拱一卒程序猿    

来源:http://www.51testing.com/html/46/n-7796546.html

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          • 我2006年计算机专业硕士毕业至今,从事软件测试及质量保障领域已经十几个年头了,从白盒自动化测试到黑盒自动化测试,从功能测试到性能测试、安全测试,从测试流程、测试框架到后来的测试管理、质量体系建设,深爱着这个行业,经常为能和小伙伴们攻克了一个技术小山头而激动兴奋, 也为了加班加点使命必达的完成了一个艰巨任务而感到欣慰。我负责测试技术管理、团队管理也已经有8年多了,期间面试过的人少说也有一两千了。从面试中常见的两个场景来聊一聊测试的基本功:场景:面试官: 你最擅长的测试领域在哪里啊?有什么职业发展计划吗?候选人:我比较多的经验在功能测试,以后希望能从事自动化测试方向。 对于这么常见的问...
            0 1 2179
            分享
          • 首发:https://mp.weixin.qq.com/s/iFqF60qQhYo2WW1Rghw3KQ 软件测试是对项目研发过程产物(文档、代码、程序等)进行审查,保障产品质量的过程。软件测试从测试内容上可以分为功能测试、性能测试、安全测试、兼容性测试等等。其中,安全测试是当今互联网产品的一项重要测试。那么,什么是安全测试?应该如何开展安全测试呢?安全测试的前世今生1945年12月, 在宾夕法尼亚大学摩尔电气工程学院,占地1500 平方英尺,重达30吨的世界上第一台全电子数字计算机ENIAC诞生。不过,那时的计算机输入还是卡片带,谈不上编程语言。随着第一代电子的计算机诞生,出现了机器语言和汇...
            1 1 2261
            分享
          • 我们平时生活中,使用苹果手机和安卓手机的各占半片江山,习惯了使用苹果手机的人很难适应安卓手机,用多了安卓手机的人也很不习惯苹果手机。于是在测试过程中,对于苹果手机和安卓手机都需要覆盖到。先来看下安卓和ios系统的机制不同:IOS采用的是沙盒运行机制,安卓采用的是虚拟机运行机制目前我们公司app产品的开发模式是:安卓:原生+RN+h5,ios:RN+h5一、测试安排对于同一app,RN的部分可以以其中一个系统为主进行测试,对于安卓原生的部分需要两个系统分别测试,确保功能不遗漏。二、系统交互考虑到两个系统本身交互不同,涉及与系统交互时需要考虑测试步骤的不同。比如:消息推送,安卓需要各个app自己实...
            8 6 7982
            分享
          • PerfMon并不是JMeter原生的工具。要使用这个工具还需要下载一些插件。1、JMeter Plugins Manager下载:该插件是一个管理插件的插件。下载页面(https://jmeter-plugins.org/downloads/all/),下载后是一个jar(jmeter-plugins-manager-0.10.jar),把该jar放到jmeter的lib/ext目录下,重启jmeter即可。jar下载地址:https://jmeter-plugins.org/get/说明地址:https://jmeter-plugins.org/wiki/PluginsManager/重启...
            12 12 1235
            分享
      • 51testing软件测试圈微信