Kafka这个linkedin开源的MQ,我在过去的blog简单介绍过。最近3周来,我的工作就是做它的一个Java移植版本,kafka是用scala写的,基于维护和定制的角度,这个拷贝的版本还是用Java。说拷贝,也不尽然,原理相同,但实现完全换过,从数据结构到通讯框架、通讯协议、程序组织,乃至一些重要功能点上都做了改进和更新。我将这个Java版本取名为metamorphosis,也就是卡夫卡的代表作《变形记》的英文名。

在原版本上,目前做了如下改进:
1、协议替换为文本协议,整个协议类似memcached,文本协议的优点自不必说。通讯框架也是采用内部使用的通讯框架,减少工作量。

2、存储结构上也采用自定义结构,更简洁紧凑。

3、kafka原来只支持consumer和broker之间的服务查找和负载均衡,meta加入了producer和broker之间的服务查找和负载均衡。

4、ConsumerAPI没有采用kafka的stream方式,而是同时实现同步获取和异步订阅两种方式,更接近JMS和Notify。

5、改进了服务器端文件recover的性能,采用并发多线程recover的方式(可选)。

6、添加了实时统计功能和协议,类似memcached的stats协议,响应透明号召。

7、客户端的连接复用。

以后要做的事情,可能包括:
1、实现类似Mysql的master/slave方案,可能还要分为同步和异步两种模式。

2、分区扩展时候的数据自动迁移功能,做到无痛水平扩展。

3、高可用方案的另一个实现。

4、嵌入Httpserver做web管理。

工作在本周初步告一段落,接下来是要做集成测试和压测等,我在两台8核16G的机器上分别部署服务器和客户端(订阅者发布者同在一台),做的一个简单压测数据如下:并发100个线程发送5000万消息并同时消费,1K大小的消息TPS可以达到3.8万,4K大小的消息TPS可以达到1.8万,服务器load都维持在一个较低的水平。从这个数据来看,超过我一开始的预期。后续可能做下kakfa的测试对比下。

转载于:https://blog.51cto.com/aliapp/1327606

最近对kafka的移植工作相关推荐

  1. mac软件移植linux,相比软件迁移 Apple Silicon Mac的Linux系统移植工作更困难

    Asahi Linux 项目团队在博客文章中写道,他们尝试了在 Apple Silicon 系统上设置备用启动内核.虽然已实现大多数功能,但还是缺乏对安装非苹果内核的命令支持. Apple Insid ...

  2. Kafka(消息队列原理,kafka定义,Kafka架构原理,kafka架构的工作流程)秒懂的kafka

    目录 什么是Kafka? 消息队列原理: 为什么要用Kafka? kafka的架构 kafka工作流程详解: 什么是Kafka? kafka是一个分布式消息队列 这个定义意味深长,记住容易,理解不易. ...

  3. 深度学习算法移植工作内容简介

    模型处理 模型可用性检查 模型转换 模型准确性验证 代码移植 代码移植 代码修正 配置编译项 编译 部署应用到目标终端 执行 调试 重复5-10 完毕

  4. Apache kafka 工作原理介绍

    消息队列 消息队列技术是分布式应用间交换信息的一种技术.消息队列可驻留在内存或磁盘上, 队列存储消息直到它们被应用程序读走.通过消息队列,应用程序可独立地执行--它们不需要知道彼此的位置.或在继续执行 ...

  5. 转-Apache kafka 工作原理介绍

    转自: https://developer.ibm.com/zh/articles/os-cn-kafka/ 消息队列 消息队列技术是分布式应用间交换信息的一种技术.消息队列可驻留在内存或磁盘上, 队 ...

  6. Kafka Broker 工作流程

    Zookeeper存储的Kafka的信息 查看zookeeper中的kafka节点所存储的信息 启动Zookeeper客户端 [atguigu@hadoop104 zookeeper-3.5.7]$ ...

  7. 为何说KubeMQ会是Kafka的替代品?

    为何说KubeMQ会是Kafka的替代品? 现代应用是复杂的,有许多不同的活动部件.即使对于最基本的执行中心应用程序,前端接口也会触发支付处理事务,而支付处理事务又会触发制造和运输事件.这些服务需要一 ...

  8. 02 Confluent_Kafka权威指南 第二章:安装kafka

    文章目录 CHAPTER 2 Installing Kafka kafka的安装配置 First Things First Choosing an Operating System Installin ...

  9. 你能说出 Kafka 这些原理吗

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者丨cxuan 来源丨Java建设者 如果你只追一个妹子并且对这 ...

最新文章

  1. sql 游标_SQL基础丨游标
  2. python利器怎么用-bluepy 一款python封装的BLE利器简单介绍
  3. 堆内存与栈内存的区别
  4. 【Python】Python的类和对象(长文系列第⑤篇)
  5. 手机当电脑音响_hifi迷你组合音响怎么样 hifi迷你组合音响优势简介【详解】
  6. 全局变量和环境变量的区别
  7. php 采集百度,PHP抓取百度内容有哪些方法
  8. Spring Boot热部署
  9. 第六章 副词(Les adverbes )
  10. 选择列表中的列'sc.cno'无效,因为该列没有包含在聚合函数或者group by 字句中《SQL中的group by该怎么用?》
  11. DotNetBar 教程
  12. python app逆向_python之app逆向破解data参数中的PassWord DES加密无填充
  13. PHP开发之留言板项目的一般流程,PHP留言板小项目(大作业)
  14. w ndows10专业版连接不上网,Win10电脑连不上网怎么回事?Win10电脑连不上网解决办法...
  15. 硬盘显示无法访问由于IO设备错误的文件找到办法
  16. 稀疏矩阵乘法运算(C语言)
  17. FC游戏 《三国志2-霸王的大陆》攻略
  18. 采用现场总线协议的压力变送器特性介绍
  19. 裸辞,在上海一点都不“难”
  20. 跨境茶话会8月期丨性能优化的艺术

热门文章

  1. 遍历某个文件夹下的所有文件并格式化显示出来
  2. 33条C#、.Net经典面试题目及答案[zt]
  3. query string parameters什么意思_public static void main(String[] args) 是什么意思?(转)...
  4. 模块定义文件导出类_浓缩的就是精华——ES6模块精炼讲解
  5. scatter函数_matplotlib.pyplot常用函数scatter讲解大全(三)
  6. Sending HTML content in an email using PHP
  7. PHP实现微信随机红包算法和微信红包的架构设计简介
  8. 【转】学会这13个原则写UI界面文案,用户才能秒懂
  9. Java 集合练习——3
  10. ASP.NET 连接MySql数据库