一、消息队列,简称MQ,message queue

生产者:生存数据写到kafka,持久化到硬盘。对同一个Topic来讲,生产者通常只有‘一个’(可以多并发)数据保存时常可以配置,默认保存七天。

消费者:从kafka里消费数据。对同一个Topic来讲,消费者会很多,根据业务需要。

kafka的消息分几个层次:

1)Topic:一类消息,例如page view 日志,click日志等都以topic的形式存在,kafka集群能够负责多个topic分发

2)partition:topic物理上的分组,一个topic可以分为多个partition(默认为2个),每个partition是一个有序的队列。partition中的每个消息都会被分配到一个有序的id(offset,消费位置)。(位置记录在zookeeper中 可以宕机继续消费)

3)Message:消息,最小订阅单元

数据流程:

1、producer根据指定的partition方法(round-robin、hash等【不指定的话内部会自己指定】),将消息发布到指定的topic的partition里面

2、kafka集群接收到producer发过来的消息后,将其持久化到硬盘,并保留消息指定时常(可配置,默认7天),而不关注消息是否是否被消费。

3、Consumer从kafka集群消费(pull)数据,并控制获取消息的offset偏移量。

(kafka消费都采用pull方式,即客户端customer主动拉取数据,客户端控制offset,客户端可以根据需要随时随地进行消费,更加灵活,而且对服务端来讲更加省事)

(push方式为服务端推送数据到客户端,kafka不支持,服务端控制offset)

比如消费同一个topic的作业有100个,如果服务端维护offset很麻烦,增加服务端的工作量。

kafka为何能支持高吞吐量?

1)数据磁盘持久化:消息不存在内存中cache,直接写入磁盘,充分利用磁盘的顺序读写性能,所以borker没内存压力

2)zero-copy:减少IO操作步骤

3)数据批量发送

4)数据压缩

5)Topic划分为多个partition,提高parallelism(并行度)

(如果内存加硬盘不是更快,但是kafka是先进先出,消费旧数据,内存是缓存最新的不适合kafka特性,所以不缓存到内存中)

kafka如何做到负载均衡?

1)producer根据用户指定的算法,讲消息发送到指定的partition

2)存在多个partition,每个partition有自己的replica(副本),每个replica分布在不同的broker节点上

3)多个partition时候需要选取leader partition(通过zk的选举机制),leader partition 负责读写,并由zookeeper 负责fail over(快速失败)

4)通过zookeeper管理broker与consumer的动态加入与离开

最新文章

  1. 山东省第七届ACM省赛------Fibonacci
  2. Android属性之build.prop生成过程分析
  3. ASP.NET中最保险最环保的返回404的方法
  4. Spring 依赖注入控制反转实现,及编码解析(自制容器)
  5. Bootstrap3生成响应式的特价商品展示布局
  6. 子div用了float浮动之后,如何撑开父元素,让父元素div自动适应高度的问题
  7. Jquery时间段选择器
  8. U盘安装ubuntu14.10时出现的gfxboot.c32:not a COM32R image问题
  9. bresenham算法的FPGA的实现1
  10. NetBeans + Xdebug 调试WordPress
  11. php RAS加密类代码
  12. c\c++里struct字节对齐规则
  13. Linux Centos7.5从docker的安装到容器的部署运行
  14. 【AtCoder】【模型转化】【二分答案】Median Pyramid Hard(AGC006)
  15. 韩顺平Linux学习笔记
  16. C#在Win10与非Win10 Windows系统鼠标滚动编程的一点区别。
  17. (原)tensorflow中finetune某些层
  18. 排查linux下java应用cpu占用过高
  19. linux内核分析 第六周读书笔记
  20. WPF实现拖拽功能

热门文章

  1. 万恶之源-python介绍
  2. VMware Workstation 10 简体中文安装教程
  3. 读书笔记 | 敏捷编码&敏捷调试
  4. passwd的使用例子
  5. 一个tcp连接可以发多少http请求
  6. [笔记]180612 for DevOps
  7. Atcoder arc085
  8. 【转载】gdb基本命令总结
  9. 【转】浅析BFC及其作用
  10. 19-11-2-M