kafka consumer 指定 offset,进行消息回溯

kafka consumer 如何根据 offset,进行消息回溯?下面的文档给出了 demo:

https://cwiki.apache.org/confluence/display/KAFKA/0.8.0+SimpleConsumer+Example

代码片段如下:

SimpleConsumer consumer = new SimpleConsumer(leadBroker, a_port, 100000, 64 * 1024, clientName);

FetchRequest req = new FetchRequestBuilder()
        .clientId(clientName)
        // Note: this fetchSize of 100000 might need to be increased if large batches are written to Kafka
        .addFetch(a_topic, a_partition, readOffset, 100000)
        .build();
FetchResponse fetchResponse = consumer.fetch(req);

客户端构造 FetchRequest,从 readOffset 处开始拉取消息。SimpleConsumer 在将来会废弃,建议使用 

org.apache.kafka.clients.consumer.KafkaConsumer#seek

 给出另外一种方法:

@Test
public void testOffset() throws InterruptedException {
    Properties props = new Properties();
    props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, KafkaProperties.KAFKA_SERVER_LIST);
    props.put(ConsumerConfig.GROUP_ID_CONFIG, "DemoConsumer");
    props.put(ConsumerConfig.ENABLE_AUTO_COMMIT_CONFIG, "false");
    props.put(ConsumerConfig.AUTO_COMMIT_INTERVAL_MS_CONFIG, "1000");
    props.put(ConsumerConfig.SESSION_TIMEOUT_MS_CONFIG, "30000");
    props.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.IntegerDeserializer");
    props.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringDeserializer");

    KafkaConsumer consumer = new KafkaConsumer<>(props);

    TopicPartition tp = new TopicPartition(KafkaProperties.TOPIC, 0);
    consumer.assign(Collections.singleton(tp));

    Map<TopicPartition, OffsetAndMetadata> offsets = new HashMap<>();
    // 设置 offset 为 0
    offsets.put(tp, new OffsetAndMetadata(0, "reset"));
    consumer.commitSync(offsets);

    LockSupport.park();
}

 

命令行重置位点的方法:https://gist.github.com/marwei/cd40657c481f94ebe273ecc16601674b

转载于:https://www.cnblogs.com/allenwas3/p/9676188.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot可以通过使用Kafka提供的API来指定offset消费消息。 首先,我们需要添加Kafka客户端的依赖。可以在pom.xml文件中添加以下依赖: ```xml <dependency> <groupId>org.springframework.kafka</groupId> <artifactId>spring-kafka</artifactId> </dependency> ``` 接下来,我们需要配置Kafka的连接信息。可以在application.properties文件(或application.yml)中添加以下配置: ``` spring.kafka.bootstrap-servers=127.0.0.1:9092 spring.kafka.consumer.group-id=your-group-id spring.kafka.consumer.auto-offset-reset=earliest ``` 其中,`spring.kafka.bootstrap-servers`指定Kafka服务器的地址和端口,`spring.kafka.consumer.group-id`指定了消费者组的ID,`spring.kafka.consumer.auto-offset-reset`指定了消费者在消费消息时的起始位置,这里设置为最早的offset。 然后,我们可以编写一个Kafka消费者来指定offset进行消费。可以创建一个Spring Bean来实现Kafka消息监听器: ```java @Component public class KafkaConsumer { @KafkaListener(topics = "your-topic-name") public void listen(ConsumerRecord<String, String> record) { // 处理消息逻辑 System.out.println("Received message: " + record.value()); } } ``` 在上述代码中,`@KafkaListener`注解指定了要监听的topic名称。当有新的消息到达时,会调用`listen`方法进行处理。 如果需要指定offset进行消费,可以在`listen`方法中添加`@Header`注解,来获取消息offset值: ```java @KafkaListener(topics = "your-topic-name") public void listen(ConsumerRecord<String, String> record, @Header(KafkaHeaders.OFFSET) long offset) { // 获取消息offset值 System.out.println("Received message at offset " + offset + ": " + record.value()); } ``` 以上就是使用Spring Boot和Kafka指定offset消费消息的基本步骤。通过上述配置和代码,我们可以实现具有指定offset功能的Kafka消息消费。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值