Kafka消息格式的选择
使用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消息格式的选择相关推荐
- 一文看懂Kafka消息格式的演变
欢迎支持笔者新作:<深入理解Kafka:核心设计与实践原理>和<RabbitMQ实战指南>,同时欢迎关注笔者的微信公众号:朱小厮的博客. 欢迎跳转到本文的原文链接:https: ...
- Apache Kafka消息格式的演变(0.7.x~0.10.x)
用 Kafka 这么久,从来都没去了解 Kafka 消息的格式.今天特意去网上搜索了以下,发现这方面的资料真少,很多资料都是官方文档的翻译:而且 Kafka 消息支持压缩,对于压缩消息的格式的介绍更少 ...
- kafka 消息格式设计实现
目前kafka消息格式有三个版本(假定v0,v1,v2),0.10.0之前使用的是v0版本,之后慢慢演变出v1,v2,后两个版本在设计方式上没有什么特别大的区别,只是做了些空间上的优化,同样的消息,新 ...
- Kafka:消息格式的选择 Avro JSON XML String JavaBean
使用Kafka是应该用怎样的消息格式才是最优? 决定我们使用何种消息格式考虑的因素有两种,一个是方便,一个效率. 就方便来说其实就是数据的转换(或者Mapping),效率包括时间和空间两个维度,当然能 ...
- Kafka消息格式中的变长字段(Varints)
欢迎支持笔者新作:<深入理解Kafka:核心设计与实践原理>和<RabbitMQ实战指南>,同时欢迎关注笔者的微信公众号:朱小厮的博客. 欢迎跳转到本文的原文链接:https: ...
- kafka之消息格式
kafka之消息格式 - 爱码网文章目录Kafka版本消息格式V0版本V1版本Message SetV0与V1的缺陷V2版本Kafka版本kafka版本1.1.1,可能绝大部分也适用于kafka 0. ...
- kafka(七):消息格式
1.kafka消息格式: (1)一个Kafka的Message由一个固定长度的header和一个变长的消息体body组成 (2)header部分由一个字节的magic(文件格式)和四个字节的CRC3 ...
- Python3读取kafka消息写入HBASE
全栈工程师开发手册 (作者:栾鹏) 架构系列文章 ubunut系统下hbase的安装和使用参考:https://blog.csdn.net/luanpeng825485697/article/deta ...
- Kafka的消息格式
Commit Log Kafka储存消息的文件被它叫做log,按照Kafka文档的说法是: Each partition is an ordered, immutable sequence of me ...
最新文章
- springboot 整合retry(重试机制)
- [导入][转]跨越域的Cookie
- golang switch fallthrough
- 11选5下期算法_双色球 133期预测 132中奖5+1
- setuptools Declaring Dependencies
- 牛顿法python实现_牛顿法求极值及其Python实现
- DirectShow Filter 开发典型例子分析 ——字幕叠加 (FilterTitleOverlay)1
- 存储过程系列三:根据表别名方式distinct去重插入
- for能否作为matlab的变量名,matlab中for语句用法
- 出租车计费java_java算法_出租车计费
- R语言基础数据操作fBasics
- 树莓派+SSH反向代理实现远程开机
- mongodb mysql读写_MySQL vs MongoDB 1000读取
- Java实现根据Word模板填充表格数据(poi方式),以及doc和docx转PDF,最全最详细版本,解决外部引用jar在linux上报ClassNotFound的问题。
- 推荐一个多端的开发框架uni-app
- Johnny-Five入门
- cv2 在图片上画线
- 如何处理在WINDOWS VISTA上安装VS2008时遇到要求安装WINDOWS XP SP2的错误和QQ对战平台安装后不能登录的问题
- 搜狗浏览器下载2015官方版最新版
- 【每日一网】Day20:A MultiPath Network for Object Detection(MPN)简单理解