首先如果我开始做一个消息队列,最开始的时候可能就是一台单机上的一个单一的log日志,不断地向这个日志中追加消息即可。

后来,可能由于一个log日志支撑不了太多的读写请求,于是就对这个log日志进行了拆分。于是就出现了一个topic有多个log日志的情况。

一条消息来了,可以保存到任意的log文件中,当然也可以自己指定算法来使得某个生产者产生的消息都保存到一个固定的log文件中。

这样好像性能上来了,但是这样每个log都是没有副本机制的,也就是说如果一个log日志如果坏掉的话,这个topic的一部分数据就全部都丢失了。

这种情况我觉得是不能忍受的,所以就想到了要把多个log都同时同步到多台其他的机器上去。这时候,原来的那台单机上分布的都是最主要的log日志,其他机器只是负责实时备份了一下这些log日志。这样有什么问题呢?问题就是你发现了,备份机器基本上没啥用,除非原来的那台机器上确实出现了log丢失的情况,其他的备份机器才能派上用场。就出现了最主要的那台机器忙死了,一直要负责写和读请求,这样从架构上考虑是不太均衡的。那么这时候能不能让读请求去副本机器上去读呢?当然可以。这样写的请求发送到最主要的那台机器,其他的读请求发送到备份机器,这样很好地缓解了原来的那台单机的读写压力。

这时候我如果作为开发者,我会想,这样好像还是能继续优化一下。因为如果那台最主要的机器一直负责写的话,磁盘不停被写容易坏。其他机器备份机器好像就只负责读,基本上磁盘不容易坏。能不能均摊这些读写压力。可以把一个topic下的多个分区的只写log均衡分布到多台备份机器上。这样比如我虽然写的都是某个topic,但是消息会均衡的写到不同机器上去。相当于打散了只写log和备份log到不同机器上。只写log所在的就是该分区的主管。其他的备份log就是该分区的小弟。这样就能做到每一台机器都是平等的。不再从机器上去区分只写机器和只读机器了。每台机器都是可读可写的,只不过只读的可能是分区A,只写的是分区B。相当于这台机器是分区B的老大,同时也是分区A的小弟。

kafka的演进历史的更多相关文章

  1. Hadoop YARN学习之Hadoop框架演进历史简述

    Hadoop YARN学习之Hadoop框架演进历史简述(1) 1. Hadoop在其发展的过程中经历了多个阶段: 阶段0:Ad Hoc集群时代 标志着Hadoop的起源,集群以Ad Hoc.单用户方 ...

  2. JVM系列.JDK演进历史

    Java程序员为什么要了解虚拟机相关的知识 Java程序在设计之初就号称"一次编译,到处运行".Java之所以能做到"一次编译,处处运行"是因为Java虚拟机隐 ...

  3. 达达O2O后台架构演进实践:从0到4000高并发请求背后的努力

    1.引言   达达创立于2014年5月,业务覆盖全国37个城市,拥有130万注册众包配送员,日均配送百万单,是全国领先的最后三公里物流配送平台. 达达的业务模式与滴滴以及Uber很相似,以众包的方式利 ...

  4. 从游击队到正规军(二):马蜂窝旅游网的IM客户端架构演进和实践总结

    一.引言 移动互联网技术改变了旅游的世界,这个领域过去沉重的信息分销成本被大大降低.用户与服务供应商之间.用户与用户之间的沟通路径逐渐打通,沟通的场景也在不断扩展.这促使所有的移动应用开发者都要从用户 ...

  5. 从游击队到正规军:马蜂窝旅游网的IM系统架构演进之路

    本文引用自马蜂窝公众号,由马蜂窝技术团队原创分享. 一.引言 今天,越来越多的用户被马蜂窝持续积累的笔记.攻略.嗡嗡等优质的分享内容所吸引,在这里激发了去旅行的热情,同时也拉动了马蜂窝交易的增长.在帮 ...

  6. 《吃透MQ系列》之扒开Kafka的神秘面纱

    大家好,这是<吃透 MQ 系列>的第二弹,有些珊珊来迟,后台被好几个读者催更了,实属抱歉! 这篇文章拖更了好几周,起初的想法是:围绕每一个具体的消息中间件,不仅要写透,而且要控制好篇幅,写 ...

  7. Java I/O演进与Linux网络I/O模型

    参考文章: 简书-浅谈Linux五种IO:http://www.jianshu.com/p/486b0965c296 一.linux基础概念 1.1 内存空间 linux系统中的使用的是虚拟存储器,即 ...

  8. (基础篇 走进javaNIO)第一章-java的i/o演进之路

    Java 是由 SUN公司在 1995 年首先发布 的编程语 言和计算平 台.这基础技术 支持最新 的程序 ,包括 实用程序 .游 戏和业 务应用程序 .J ava 在世界各地 的 8.5  亿 多 ...

  9. Spark Streaming和Kafka集成深入浅出

    写在前面 本文主要介绍Spark Streaming基本概念.kafka集成.Offset管理 本文主要介绍Spark Streaming基本概念.kafka集成.Offset管理 一.概述 Spar ...

随机推荐

  1. 【译】深入理解Rust中的生命周期

    原文标题:Understanding Rust Lifetimes 原文链接:https://medium.com/nearprotocol/understanding-rust-lifetimes- ...

  2. Spark学习进度-实战测试

    spark-shell  交互式编程 题目:该数据集包含了某大学计算机系的成绩,数据格式如下所示: Tom,DataBase,80 Tom,Algorithm,50 Tom,DataStructure ...

  3. 树莓派4B智能小车机器套件——入手组装实验记录

    树莓派4B智能小车机器套件--入手组装实验记录 4WD智能小车(4WD SMART ROBOT KIT),支持Arduino.51.STM32.Raspberry Pi等4个版本.本套件采用的是树莓派 ...

  4. PPT 转 word

    可以wps  直接转 打开wps   在页面里直接点击右键  可以导出wps

  5. 翻译 - ASP.NET Core 托管和部署 - 在 Linux 上使用 Nginx 托管 ASP.NET Core 网站

    翻译自 https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/linux-nginx?view=aspnetcore-5.0 本文介 ...

  6. 【Nginx】yum安装nginx

    这里是nginx的yum安装源: centos7: rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-cent ...

  7. 【Linux】snmp在message中报错: /etc/snmp/snmpd.conf: line 311: Error: ERROR: This output format has been de

    Apr 17 17:36:17 localhost snmpd[2810]: /etc/snmp/snmpd.conf: line 311: Error: ERROR: This output for ...

  8. 【ORACLE】11g rac+dg

    首先感谢群友分享的文档,在这里先感谢哆啦B梦,非常感谢 该文档主要指导如何利用现有的RAC环境搭建一套RAC与单实例的DG的环境  ============================主机配置信息 ...

  9. Arduino—学习笔记—基础语法

    图解 函数具体讲解 pinMode(工作接脚,模式) 工作接脚 工作接脚编号(0--13与A0--A5) 模式 工作模式:INPUT或OUTPUT 例子 将8接口设置为输出模式 pinMode(8,O ...

  10. ctfhub技能树—信息泄露—备份文件下载—网站源码

    打开靶机 查看网页内容 使用dirsearch进行扫描 命令如下 python3 dirsearch.py -u http://challenge-91f1f5e6a791ab02.sandbox.c ...