kafka consumer消费者API

一、准备工作

  • 在IDE上创建maven项目,pom文件添加依赖
<!-- https://mvnrepository.com/artifact/org.apache.kafka/kafka-clients -->
<dependency>
    <groupId>org.apache.kafka</groupId>
    <artifactId>kafka-clients</artifactId>
    <version>1.1.1</version>
</dependency>
  • 启动zookeeper集群
bin/zkServer.sh start
  • 启动kafka集群
bin/kafka-server-start.sh -daemon config/server.properties
  • kafka集群开一个生产者
bin/kafka-console-producer.sh --broker-list localhost:9092 --topic mydata 

二、创建一个普通的消费者(自动提交 offset)

Consumer 消费数据时的可靠性是很容易保证的,因为数据在 Kafka 中是持久化的,故不用担心数据丢失问题。

由于 consumer 在消费过程中可能会出现断电宕机等故障,consumer 恢复后,需要从故障前的位置的继续消费,所以 consumer 需要实时记录自己消费到了哪个 offset,以便故障恢复后继续消费。所以 offset 的维护是 Consumer 消费数据是必须考虑的问题

下方代码,这种消费只会记录最大的offset,相当于在命令行不加 --from-beginning,以前的数据消费不到

import java.util.Collections;
import java.util.Properties;
import org.apache.kafka.clients.consumer.ConsumerRecord;
import org.apache.kafka.clients.consumer.ConsumerRecords;
import org.apache.kafka.clients.consumer.KafkaConsumer;

public class MyConsumer {
   
    public static void main(String[] args) {
   
        Properties properties = new Properties();

        /* 指定连接kafka集群 */
        properties.put("bootstrap.servers", "centos7-1:9092");

        /* 开启自动提交 */
        properties.put("enable.auto.commit", Boolean.valueOf(true));

        /* 自动提交的延时时间 */
        properties.put("auto.commit.interval.ms", "1000");

        /* key的反序列化 */
        properties.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
        /* value的反序列化 */
        properties.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");

        /* 指定消费者组 */
        properties.put("group.id", "mygroup");

        /* 创建消费者对象 */
        KafkaConsumer<String, String> consumer = new KafkaConsumer(properties);

        /* 订阅的主题,可同时订阅多个 */
        consumer.subscribe(Collections.singletonList("bigdata"));


        while (true) {
   
            /* 获取数据,设置拉取数据延迟时间 */
            ConsumerRecords<String, String> consumerRecords = consumer.poll(100);


            for (ConsumerRecord<String, String> consumerRecord : consumerRecords)
            {
   
                /* 打印消息的键和值 */
                System.out.println(consumerRecord.key() + "==>" + consumerRecord.value());
            }
        }
    }
}

运行截图:
在这里插入图片描述

三、那么如何重新消费某一个主题的数据(自动提交 offset)

可以换一个消费者组,并且重置offset

/* 指定消费者组 */
properties.put("group.id", 
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Apache Kafka是一个分布式流处理平台,它主要用于实时数据管道和日志收集。Kafka的独立消费者API允许应用程序作为独立的消费者Kafka主题中消费消息。以下是关于Kafka独立消费者API的一些关键点: 1. **消费者组(Consumer Group)**:每个消费者都是某个消费者组的一部分,这样可以实现消息的分发和负载均衡。在一个组中,多个消费者可以并行消费主题中的数据。 2. **拉取模型(Pull Model)**:消费者主动从Kafka服务器拉取消息,而不是被动地等待推送。这样可以提供更高的灵活性和可扩展性。 3. **分区(Partitions)**:Kafka主题被划分为多个分区,消费者可以选择一个或多个分区进行消费。每个分区内部的消息是有序的。 4. **位移(Offset Management)**:消费者在消费过程中会保存自己的消费进度,即位移(offset),这样在重启时可以从上次停止的地方继续消费。 5. **回调处理(Polling)**:消费者通过`poll()`方法定期检查新的消息,然后在回调函数中处理这些消息。 6. **消费者配置(Consumer Configurations)**:例如`auto.offset.reset`、`enable.auto.commit`等设置,用于调整消费者的消费策略。 7. **错误处理和恢复**:消费者需要处理网络故障、消息丢失等问题,并能自动或手动重试未成功的操作。 相关问题: 1. Kafka的生产者和消费者如何协同工作? 2. 如何在Kafka中设置消费者组的配置? 3. 消费者如何处理消息确认和失败重试? 4. Kafka API提供了哪些高级特性来优化消息消费性能? 5. 如何在Kafka中使用Java或Python实现一个消费者应用?

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值