使用Kafka是应该用怎样的消息格式才是最优?

决定我们使用何种消息格式考虑的因素有两种,一个是方便,一个效率。就方便来说其实就是数据的转换(或者Mapping),效率包括时间和空间两个维度,当然能压缩最小无论是空间还是时间都是良好的选择。所以不同的场景应该有不同的最优,Kafka提供了String和Byte数组两种选择,分别org.apache.kafka.common.serialization.ByteArraySerializer,org.apache.kafka.common.serialization.StringSerializer。使用前者时可以使用官方推荐的Avro,或者自定义的序列化Bean。后者主要是简单消息或者JSON,还有XML(比较少用)。

如果一句话能说清楚,当然用String。

JSON是最常用的消息,因为它足够灵活,又没有XML那么罗嗦,而且支持的语言又多,几乎是计算机行业的自然语言了。所以采用JSON在数据转换方面的工作量肯定是比较小的。它的劣势就是由于它每条记录都需要Key,所以在大数据时,其实它有大量的数据冗余(和二维表比较,二维表只有一行是Name),另外一方面的劣势就是它不够明白,需要额外的文档来说明每一个字段。还有就是在操作的时候,其实是大量的String截取操作,也不经济。使用Kafka的时候,如果我们要保留大量数据,存储是一个要考虑的重要因素。所以当我们的数据格式固定时,应该避免直接JSON,可以考虑使用Avro。那什么时候使用JSON呢?我觉得当我们的数据格式完全不固定,而且大量的文字性的消息,例如从网上爬取一篇文章,然后分词,做摘要,最后存储到ElasticSearch里面做检索,这么一个流程,使用JSON其实是免去了很多转换工作。

Avro是官方推荐,有一篇文章(https://www.confluent.io/blog/avro-kafka-data/)解释了它的诸多好处。我觉得它的好处就是解决了JSON的一些问题,但增加了一道转换的工序。

另外说一下JavaBean,JavaBean的好处自然就是它是一个对象,直接用,没有额外的转换,它的缺点除了具备JSON所有的缺点外,它还不够灵活。所以一般不用,除非是做一个临时解决方案。但如果自己去实现序列化就另当别论了,例如,如果你想搜集用户行为,用户行为数据一般有固定的格式,例如帐户、姓名、事件、时间等,把这些信息序列化成一个数组,发送给消费者,无论是存储还是传递效率都是最高的。这里有一个例子(https://github.com/iandow/kafka_junit_tests/blob/master/src/test/java/com/mapr/sample/TypeFormatSpeedTest.java)

Kafka消息格式的选择相关推荐

  1. 一文看懂Kafka消息格式的演变

    欢迎支持笔者新作:<深入理解Kafka:核心设计与实践原理>和<RabbitMQ实战指南>,同时欢迎关注笔者的微信公众号:朱小厮的博客. 欢迎跳转到本文的原文链接:https: ...

  2. Apache Kafka消息格式的演变(0.7.x~0.10.x)

    用 Kafka 这么久,从来都没去了解 Kafka 消息的格式.今天特意去网上搜索了以下,发现这方面的资料真少,很多资料都是官方文档的翻译:而且 Kafka 消息支持压缩,对于压缩消息的格式的介绍更少 ...

  3. kafka 消息格式设计实现

    目前kafka消息格式有三个版本(假定v0,v1,v2),0.10.0之前使用的是v0版本,之后慢慢演变出v1,v2,后两个版本在设计方式上没有什么特别大的区别,只是做了些空间上的优化,同样的消息,新 ...

  4. Kafka:消息格式的选择 Avro JSON XML String JavaBean

    使用Kafka是应该用怎样的消息格式才是最优? 决定我们使用何种消息格式考虑的因素有两种,一个是方便,一个效率. 就方便来说其实就是数据的转换(或者Mapping),效率包括时间和空间两个维度,当然能 ...

  5. Kafka消息格式中的变长字段(Varints)

    欢迎支持笔者新作:<深入理解Kafka:核心设计与实践原理>和<RabbitMQ实战指南>,同时欢迎关注笔者的微信公众号:朱小厮的博客. 欢迎跳转到本文的原文链接:https: ...

  6. kafka之消息格式

    kafka之消息格式 - 爱码网文章目录Kafka版本消息格式V0版本V1版本Message SetV0与V1的缺陷V2版本Kafka版本kafka版本1.1.1,可能绝大部分也适用于kafka 0. ...

  7. kafka(七):消息格式

    1.kafka消息格式: (1)一个Kafka的Message由一个固定长度的header和一个变长的消息体body组成  (2)header部分由一个字节的magic(文件格式)和四个字节的CRC3 ...

  8. Python3读取kafka消息写入HBASE

    全栈工程师开发手册 (作者:栾鹏) 架构系列文章 ubunut系统下hbase的安装和使用参考:https://blog.csdn.net/luanpeng825485697/article/deta ...

  9. Kafka的消息格式

    Commit Log Kafka储存消息的文件被它叫做log,按照Kafka文档的说法是: Each partition is an ordered, immutable sequence of me ...

最新文章

  1. springboot 整合retry(重试机制)
  2. [导入][转]跨越域的Cookie
  3. golang switch fallthrough
  4. 11选5下期算法_双色球 133期预测 132中奖5+1
  5. setuptools Declaring Dependencies
  6. 牛顿法python实现_牛顿法求极值及其Python实现
  7. DirectShow Filter 开发典型例子分析 ——字幕叠加 (FilterTitleOverlay)1
  8. 存储过程系列三:根据表别名方式distinct去重插入
  9. for能否作为matlab的变量名,matlab中for语句用法
  10. 出租车计费java_java算法_出租车计费
  11. R语言基础数据操作fBasics
  12. 树莓派+SSH反向代理实现远程开机
  13. mongodb mysql读写_MySQL vs MongoDB 1000读取
  14. Java实现根据Word模板填充表格数据(poi方式),以及doc和docx转PDF,最全最详细版本,解决外部引用jar在linux上报ClassNotFound的问题。
  15. 推荐一个多端的开发框架uni-app
  16. Johnny-Five入门
  17. cv2 在图片上画线
  18. 如何处理在WINDOWS VISTA上安装VS2008时遇到要求安装WINDOWS XP SP2的错误和QQ对战平台安装后不能登录的问题
  19. 搜狗浏览器下载2015官方版最新版
  20. 【每日一网】Day20:A MultiPath Network for Object Detection(MPN)简单理解

热门文章

  1. Linux系统进阶-基础IO
  2. 2021-06-15常见网安设备默认口令大全
  3. 我的剑留给能挥舞它的人——纪念逝去的2015
  4. 大专生出身?2021Java高级面试题汇总解答,最新整理
  5. 计算机教室在哪儿英语,教室的英文是什么
  6. matlab如何将三维转为二维_matlab三维矩阵怎么转为二维矩阵?
  7. Java基础动态初始化二维数组
  8. 基于微信小程序的校园跑腿系统-计算机毕业设计
  9. c++中的clock()函数
  10. python网络安全应用中心_安全人员常用的python库