1.什么是Kafka

Kafka是一个高通过率分布式消息系统

2.消息队列(Message Queue)MQ的模型


消息队列的简单架构图

3个核心概念:

Sender Application:消息队列的发送者,也叫生产者producer

Message Queue

Receiver Application:消息接受者,也叫消费者comsumer

消息队列:消息排队,消息就是数据。通过消息模型可以完成一个系统和另一个系统的交互,系统的通信也就是系统与系统的调用。

消息队列容易和SOA混淆

SOA系统是直接的调用,通过代理对另个系统调用,也叫RPC的解决方案。

作为消息的架构和作为SOA的RPC最大的区别:不是直接的调用关系,消息作为异构系统的整合是通过消息的传递完成彼此之间的交互解耦合,彼此之间协调的处理。

消息队列的好处:1.解耦合  没有系统的侵入性 2.提高系统的响应时间

比如订单支付本来是需要完成123,这样会响应等待时间较长。

订单支付成功的方法(){
      1、修改订单状态
      2、计算会员积分
      3、通知物流进行配送
}

改进 :把用户最需要得到的响应操作放在订单支付成功的方法()中

订单支付成功的方法(){
      1、修改订单状态
}

另外2个非主要功能可以借用消息系统发送到消息队列中,由消费者来消费。

2、计算会员积分
      3、通知物流进行配送

3.消息队列的分类

两种:点对点和发布订阅

点对点问题:

1.如果消息被某个系统消费,但是其他系统就不能再消费

2.为了性能的提高我们还是希望有多点来消费,因为只能有一个消费者,所以这样就无法实现。

所以点对点用的很少。

kafka也属于发布订阅。

4.其他常见消息队列

RabbitMQ:支持的协议多,非常重量级消息队列,对路由(Routing),负载均衡(Load balance)或者数据持久化都有很好的支持。
负载和路由:系统设计中,消息队列也许是要集群,集群就会消息在生产之后往哪个集群中的节点去发送数据。
持久化:有些消息队列可以文件等形式存储消息,目的是以防意外消息丢失。保证消息安全,但是由于其有IO所以性能有损失。

ZeroMQ:号称最快的消息队列系统,尤其针对大吞吐量的需求场景,擅长的高级/复杂的队列,但是技术也复杂,并且只提供非持久性的队列。
不支持持久化。

ActiveMQ:很早出现了,Apache下的一个子项,类似ZeroMQ,能够以代理人和点对点的技术实现队列 。JMS的一个实现者。EJB可以对其访问。
Redis:本质上不是消息队列而是一个key-Value的NoSql数据库,但也支持MQ功能,数据量较小性能优于RabbitMQ,数据超过10K就很慢,10K之内效率在上面三者之上。

5.Kafka简介

Kafka是伴随大数据产生的,只要处理大数据,主要是内存计算,实时计算。Kafka作为一个非常重要的缓冲者完成内存计算或者实时计算的数据支持。

Kafka 是分布式发布-订阅消息系统,LinkedIn开源,Scala语言编写。

Kafka 是分布式发布-订阅消息系统。是一个分布式的,可划分的(对消息进行分区),多订阅者,冗余备份的持久性的日志服务(消息从生产者发送到kafka之后会存到其日志中)。它主要用于处理活跃的流式数据(几分钟左右,区别有mapreduce的几个小时)。

6.Kafka的特点

1.同时为发布和订阅提供高吞吐量。据了解,Kafka 每秒可以生产约 25 万消息(50 MB),每秒处理 55 万消息(110 MB)
2.可进行持久化操作。将消息持久化到磁盘,因此可用于批量消费,例如 ETL,以及实时应用程序。通过将数据持久化到硬盘以及 replication 防止数据丢失。
3.分布式系统,易于向外扩展。所有的 producer、broker(对于MQ的表达,消息服务器叫broker) 和 consumer 都会有多个,均为分布式的。无需停机即可扩展机器。扩展需要依赖于zookeeper做节点负载均衡和master节点选举。
4.消息被处理的状态是在 consumer 端维护,而不是由 server 端维护。当失败时能自动平衡。

由哪个 consumer消费,消费了多少Broker不管。Broker只管存消息,删消息,不维护消息状态,是无状态服务。consumer需要zookeeper配合完成,消息来了,需要 consumer 去watch到zookeeper中的变化,zookeeper会记录消费的内容。
5.支持 online 和 offline 的场景。

7.性能测试

在虚拟机上做的性能测试。
测试环境:cpu: 双核   内存 :2GB   硬盘:60GB

结论


消息堆积压力测试

单个kafka broker节点测试,启动一个kafka broker和Producer,Producer不断向broker发送数据,
直到broker堆积数据为18GB为止(停止Producer运行)。启动Consumer,不间断从broker获取数据,
直到全部数据读取完成为止,最后查看Producer==Consumer数据,没有出现卡死或broker不响应现象

数据大量堆积不会出现broker卡死
或不响应现象

生产者速率

1.200byte/msg,4w/s左右。2.1KB/msg,1w/s左右

性能上是完全满足要求,其性能主要由磁盘决定

消费者速率

1.200byte/msg,4w/s左右。2.1KB/msg,1w/s左右

性能上是完全满足要求,其性能主要由磁盘决定

参考:http://www.aboutyun.com/thread-9942-1-1.html

8.Kafka的逻辑架构

Produces生产消息放到topic中,会有多个topic,消息有分类,不同的消息对应不同的topic。

《Apache Kafka》学习笔记相关推荐

  1. 第二行代码学习笔记——第六章:数据储存全方案——详解持久化技术

    本章要点 任何一个应用程序,总是不停的和数据打交道. 瞬时数据:指储存在内存当中,有可能因为程序关闭或其他原因导致内存被回收而丢失的数据. 数据持久化技术,为了解决关键性数据的丢失. 6.1 持久化技 ...

  2. 第一行代码学习笔记第二章——探究活动

    知识点目录 2.1 活动是什么 2.2 活动的基本用法 2.2.1 手动创建活动 2.2.2 创建和加载布局 2.2.3 在AndroidManifest文件中注册 2.2.4 在活动中使用Toast ...

  3. 第一行代码学习笔记第八章——运用手机多媒体

    知识点目录 8.1 将程序运行到手机上 8.2 使用通知 * 8.2.1 通知的基本使用 * 8.2.2 通知的进阶技巧 * 8.2.3 通知的高级功能 8.3 调用摄像头和相册 * 8.3.1 调用 ...

  4. 第一行代码学习笔记第六章——详解持久化技术

    知识点目录 6.1 持久化技术简介 6.2 文件存储 * 6.2.1 将数据存储到文件中 * 6.2.2 从文件中读取数据 6.3 SharedPreferences存储 * 6.3.1 将数据存储到 ...

  5. 第一行代码学习笔记第三章——UI开发的点点滴滴

    知识点目录 3.1 如何编写程序界面 3.2 常用控件的使用方法 * 3.2.1 TextView * 3.2.2 Button * 3.2.3 EditText * 3.2.4 ImageView ...

  6. 第一行代码学习笔记第十章——探究服务

    知识点目录 10.1 服务是什么 10.2 Android多线程编程 * 10.2.1 线程的基本用法 * 10.2.2 在子线程中更新UI * 10.2.3 解析异步消息处理机制 * 10.2.4 ...

  7. 第一行代码学习笔记第七章——探究内容提供器

    知识点目录 7.1 内容提供器简介 7.2 运行权限 * 7.2.1 Android权限机制详解 * 7.2.2 在程序运行时申请权限 7.3 访问其他程序中的数据 * 7.3.1 ContentRe ...

  8. 第一行代码学习笔记第五章——详解广播机制

    知识点目录 5.1 广播机制 5.2 接收系统广播 * 5.2.1 动态注册监听网络变化 * 5.2.2 静态注册实现开机广播 5.3 发送自定义广播 * 5.3.1 发送标准广播 * 5.3.2 发 ...

  9. 第一行代码学习笔记第九章——使用网络技术

    知识点目录 9.1 WebView的用法 9.2 使用HTTP协议访问网络 * 9.2.1 使用HttpURLConnection * 9.2.2 使用OkHttp 9.3 解析XML格式数据 * 9 ...

  10. 安卓教程----第一行代码学习笔记

    安卓概述 系统架构 Linux内核层,还包括各种底层驱动,如相机驱动.电源驱动等 系统运行库层,包含一些c/c++的库,如浏览器内核webkit.SQLlite.3D绘图openGL.用于java运行 ...

最新文章

  1. 用鸿蒙跑了个 “hello world”!鸿蒙开发初体验
  2. 从5G入池看AI发展新方向 | 杜克大学陈怡然教授专访
  3. java 语言中System.getProperty(user.dir)
  4. SqlServer中bit类型的性别的一些问题
  5. 语言nomogram校准曲线图_医学统计与R语言:Meta 回归作图(Meta regression Plot)
  6. 95-180-055-源码-Watermark-AutoMaticWatermarkContext
  7. html无法显示null打开,js出现null错误的原因?
  8. http://blog.csdn.net/x86android/article/details/16980967
  9. MSN无法登陆的八种情况
  10. sublime text3插件TrailingSpaces无法使用的解决方法
  11. 7-1 特殊a串数列求和 (20 分)
  12. Kotlin实战【四】迭代事物:while和for
  13. HFSS - 双频微带天线设计与仿真
  14. 【2022-01-06】JS逆向之QCC请求头参数
  15. MSN 通信协议学习笔记(转)
  16. Android Paint,Canvas api 详解
  17. 50个高端大气上档次的管理后台界面模板
  18. 计算机桌面文件删除不掉是怎么了,小马教你桌面上文件夹删不掉 【设置方法】 的办法_...
  19. 12306验证码识别初尝试(1)
  20. pixel cra_cra到pwa

热门文章

  1. ug编程内公差和外公差是什么_数控加工编程的主要内容有哪些?
  2. 如何将c语言改写成汇编语言,如何把汇编语言转换成C语言
  3. crontab安装_django-crontab实现服务端的定时计划任务
  4. 点、线、面生成mvt(MapBox Vector Tile)格式的瓦片总结
  5. keras 的 example 文件 cifar10_cnn.py 解析
  6. 【图像分类案例】(2) DenseNet 天气图片四分类(权重迁移学习),附Tensorflow完整代码
  7. ()shi linux字符设备,Linux字符设备驱动基础(三)
  8. phalcon php 5.4,如何在php上安装phalcon
  9. 【进阶玩法】Angular用emit()实现类似Vue.js的v-model双向绑定[(ngModel)]功能
  10. UE5使用MetaHuman构建超现实的角色