一个 Kafka 的 Message 由一个固定长度的 header 和一个变长的消息体 body 组成
header 部分由一个字节的 magic(文件格式)和四个字节的 CRC32(用于判断 body 消息体
是否正常)构成。当 magic 的值为 1 的时候,会在 magic 和 crc32 之间多一个字节的数据:
attributes(保存一些相关属性,比如是否压缩、压缩格式等等);如果 magic 的值为 0,那
么不存在 attributes 属性
body 是由 N 个字节构成的一个消息体,包含了具体的 key/value 消息
怎么查看 kafka 的 offset
0.9 版本以上,可以用最新的 Consumer client 客户端,有 consumer.seekToEnd() / c
onsumer.position() 可以用于得到当前最新的 offset:
0.9 版本以上,可以用最新的 Consumer client 客户端,有 consumer.seekToEnd() / c
onsumer.position() 可以用于得到当前最新的 offset:
5、HDFS 读写数据的过程
读:
1、跟 namenode 通信查询元数据,找到文件块所在的 datanode 服务器
2、挑选一台 datanode(就近原则,然后随机)服务器,请求建立 socket 流
3、datanode 开始发送数据(从磁盘里面读取数据放入流,以 packet 为单位来做校验)
4、客户端以 packet 为单位接收,现在本地缓存,然后写入目标文件
1、跟 namenode 通信查询元数据,找到文件块所在的 datanode 服务器
2、挑选一台 datanode(就近原则,然后随机)服务器,请求建立 socket 流
3、datanode 开始发送数据(从磁盘里面读取数据放入流,以 packet 为单位来做校验)
4、客户端以 packet 为单位接收,现在本地缓存,然后写入目标文件
写:
1、根 namenode 通信请求上传文件,namenode 检查目标文件是否已存在,父目录是否
存在
2、namenode 返回是否可以上传
3、client 请求第一个 block 该传输到哪些 datanode 服务器上
1、根 namenode 通信请求上传文件,namenode 检查目标文件是否已存在,父目录是否
存在
2、namenode 返回是否可以上传
3、client 请求第一个 block 该传输到哪些 datanode 服务器上