kafka集群消费之ConsumerRecord类

本文介绍了Apache Kafka中ConsumerRecord类的实现细节,包括其构造函数、成员变量和关键方法。ConsumerRecord用于封装从Kafka接收的数据,包含了主题、分区、偏移量等信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



  • public final class ConsumerRecord <K,V> 
    extends Object
    从Kafka收到的键/值对。这包括主题名称和分区号,从中接收记录以及指向Kafka分区中记录的偏移量。
    • 构造函数摘要

      构造函数  
      构造函数和描述
      ConsumerRecord(String topic, int partition, long offset, K key, V value)
      创建从指定主题和分区接收的记录(在消息格式支持的时间戳之前和公开序列化元数据之前提供与Kafka 0.9的兼容性)。
      ConsumerRecord(String topic, int partition, long offset, long timestamp, org.apache.kafka.common.record.TimestampType timestampType, long checksum, int serializedKeySize, int serializedValueSize, K key, V value)
      创建从指定主题和分区接收的记录
    • 现场细节

      • NO_TIMESTAMP
        public static final long NO_TIMESTAMP
        也可以看看:
        常数字段值
      • NULL_SIZE
        public static final int NULL_SIZE
        也可以看看:
        常数字段值
      • NULL_CHECKSUM
        public static final int NULL_CHECKSUM
        也可以看看:
        常数字段值
    • 构造函数详细信息

      • ConsumerRecord
        public ConsumerRecord(String  topic,
                      int分区,
                      长偏移,
                      K  键,
                       V  值)
        创建从指定主题和分区接收的记录(在消息格式支持的时间戳之前和公开序列化元数据之前提供与Kafka 0.9的兼容性)。
        参数:
        topic - 收到此记录的主题
        partition - 收到此记录的主题分区
        offset - 此记录在相应Kafka分区中的偏移量
        key - 记录的密钥(如果存在)(允许为null)
        value - 记录内容
      • ConsumerRecord
        public ConsumerRecord(String  topic,
                      int分区,
                      长偏移,
                      很长的时间戳,
                      org.apache.kafka.common.record.TimestampType timestampType,
                      长校验和,
                      int serializedKeySize,
                      int serializedValueSize,
                      K  键,
                       V  值)
        创建从指定主题和分区接收的记录
        参数:
        topic - 收到此记录的主题
        partition - 收到此记录的主题分区
        offset - 此记录在相应Kafka分区中的偏移量
        timestamp - 记录的时间戳。
        timestampType - 时间戳类型
        checksum - 完整记录的校验和(CRC32)
        serializedKeySize - 序列化密钥的长度
        serializedValueSize - 序列化值的长度
        key - 记录的密钥(如果存在)(允许为null)
        value - 记录内容
    • 方法细节

      • 话题
        public  String  topic()
        收到此记录的主题
      • 划分
        public int partition()
        从中接收此记录的分区
      • 公钥  K  键()
        密钥(如果未指定密钥,则为null)
      • 公共  V  值()
        价值
      • 抵消
        公共长偏移量()
        此记录在相应Kafka分区中的位置。
      • 时间戳
        公共长时间戳()
        此记录的时间戳
      • timestampType
        public org.apache.kafka.common.record.TimestampType timestampType()
        此记录的时间戳类型
      • 校验
        公共长校验和()
        记录的校验和(CRC32)。
      • serializedKeySize
        public int serializedKeySize()
        序列化未压缩密钥的大小(以字节为单位)。如果key为null,则返回的大小为-1。
      • serializedValueSize
        public int serializedValueSize()
        序列化未压缩值的大小(以字节为单位)。如果value为null,则返回的大小为-1。
### 使用Java进行Kafka消费 为了使用Java编写程序来消费来自Apache Kafka的消息,开发者通常会依赖于`org.apache.kafka.clients.consumer.KafkaConsumer`。此消费者客户端提供了多种配置参数以便灵活调整性能和行为特性[^1]。 下面是一个简单的例子展示怎样创建并运行一个基本的Kafka消息消费者: ```java import org.apache.kafka.clients.consumer.ConsumerRecord; import org.apache.kafka.clients.consumer.ConsumerRecords; import org.apache.kafka.clients.consumer.KafkaConsumer; import java.time.Duration; import java.util.Collections; import java.util.Properties; public class SimpleKafkaConsumer { public static void main(String[] args) { Properties props = new Properties(); props.put("bootstrap.servers", "localhost:9092"); props.put("group.id", "test-group"); props.put("enable.auto.commit", "true"); props.put("auto.commit.interval.ms", "1000"); props.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer"); props.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer"); try (KafkaConsumer<String, String> consumer = new KafkaConsumer<>(props)) { consumer.subscribe(Collections.singletonList("my-topic")); while (true) { ConsumerRecords<String, String> records = consumer.poll(Duration.ofMillis(100)); for (ConsumerRecord<String, String> record : records) { System.out.printf("offset = %d, key = %s, value = %s%n", record.offset(), record.key(), record.value()); } } } } } ``` 这段代码展示了如何设置连接到Kafka集群所需的属性,并订阅特定主题以接收数据流。通过调用`poll()`方法可以获取一批记录,在这里被处理后打印出来。注意这里的自动提交机制简化了偏移量管理;对于更复杂的场景可能需要手动控制这一点。 #### 关键概念与最佳实践 当涉及到多线程环境下的资源管理和状态共享时,确保线程安全至关重要。这可以通过同步的方法或者块、采用线程安全的数据结构以及对象实现。另外还可以考虑应用合适的线程安全设计模式去应对共同存在的挑战,比如读写锁等高级别的并发构建能够提供更好的性能表现和资源利用率[^3]。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值