Kafka-Record(消息格式)

    注:本文依赖于kafka-0.10.0.1-src

    kafka消息格式是经过多个版本的演变的,本文只说0.10.0.1版本的消息格式。

    消息格式如图1所示:


                                                                    图1

    CRC:用于校验消息内容。占4个字节 

    MAGIC:用于标识kafka版本,默认是1。占1个字节

    ATTRIBUTES:用于存储消息压缩使用的编码以及Timestamp类型。这个版本仅支持 gzip、snappy、lz4三种压缩格式。后三位如果是000则表示没有使用压缩,如果是001则表示是gzip压缩,如果是010则是snappy压缩,如果是011则是snappy压缩。第4位(从右数)如果为0,代表使用create time,如果为1代表append time。其余位保留。占1个字节

    TIMESTAMP:时间戳。占8个字节

    KEY_SIZE:用于标识KEY内容的长度K。占用4个字节

    KEY:存储的是KEY的具体内容。占用K个字节。

    VALUE_SIZE:主要标识VALUE的内容的长度V。占用4个字节。

    VALUE:消

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用Java统计Kafka消息总数的示例代码: ```java import java.util.Properties; import org.apache.kafka.clients.consumer.ConsumerConfig; import org.apache.kafka.clients.consumer.ConsumerRecord; import org.apache.kafka.clients.consumer.ConsumerRecords; import org.apache.kafka.clients.consumer.KafkaConsumer; import org.apache.kafka.common.TopicPartition; public class KafkaMessageCounter { public static void main(String[] args) { String topicName = "your_topic_name"; String bootstrapServers = "localhost:9092"; // Kafka集群地址 String groupId = "test_group"; // 消费者组ID Properties props = new Properties(); props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, bootstrapServers); props.put(ConsumerConfig.GROUP_ID_CONFIG, groupId); props.put(ConsumerConfig.ENABLE_AUTO_COMMIT_CONFIG, "false"); props.put(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG, "earliest"); props.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringDeserializer"); props.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringDeserializer"); KafkaConsumer<String, String> consumer = new KafkaConsumer<>(props); TopicPartition partition = new TopicPartition(topicName, 0); consumer.assign(Arrays.asList(partition)); consumer.seekToBeginning(Arrays.asList(partition)); long messageCount = 0; while (true) { ConsumerRecords<String, String> records = consumer.poll(100); if (records.isEmpty()) { break; } for (ConsumerRecord<String, String> record : records) { messageCount++; } } System.out.println("Total message count: " + messageCount); consumer.close(); } } ``` 这段代码使用Kafka消费者API来消费指定topic的所有消息,并统计消息总数。需要注意的是,这里使用了手动提交offset的方式,以确保消息不会被重复消费。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值