Kafka原生API

一、依赖

<dependencies>
        <!-- kafka依赖 -->
        <dependency>
            <groupId>org.apache.kafka</groupId>
            <artifactId>kafka_2.12</artifactId>
            <version>1.1.1</version>
        </dependency>

        <dependency>
             <groupId>org.slf4j</groupId>
             <artifactId>slf4j-nop</artifactId>
             <version>1.7.2</version>
         </dependency>
    </dependencies>

二、生产端

1、生产端执行代码

package producer;

import org.apache.kafka.clients.producer.KafkaProducer;
import org.apache.kafka.clients.producer.ProducerConfig;
import org.apache.kafka.clients.producer.ProducerRecord;

import java.util.Properties;

public class OneProducer {
    // 第一个泛型:当前生产者所生产消息的key
    // 第二个泛型:当前生产者所生产的消息本身
    private KafkaProducer<Integer, String> producer;

    //ProducerConfig类包含properties中的key
    public OneProducer() {
        Properties properties = new Properties();
        // 指定kafka集群
        properties.put("bootstrap.servers", "39.97.176.160:9092");
        // 指定key与value的序列化器
        properties.put("key.serializer", "org.apache.kafka.common.serialization.IntegerSerializer");
        properties.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");

        // 指定生产者每10条向broker发送一次
        //properties.put("batch.size", 10);
        // 指定生产者每50ms向broker发送一次
        //properties.put("linger.ms", 50);
        this.producer = new KafkaProducer<Integer, String>(properties);
    }

    public void sendMsg() {
        // 创建消息记录(包含主题、消息本身)  (String topic, V value)
        //ProducerRecord<Integer, String> record = new ProducerRecord<>("test", "tianjin");
        // 创建消息记录(包含主题、key、消息本身)  (String topic, K key, V value)
        // ProducerRecord<Integer, String> record = new ProducerRecord<>("cities", 1, "tianjin");
        // 创建消息记录(包含主题、partition、key、消息本身)  (String topic, Integer partition, K key, V value)
        ProducerRecord<Integer, String> record = new ProducerRecord<>("test","huNan");
        producer.send(record);
    }

    //有结果回调
    public void sendMsgTwo() {
        ProducerRecord<Integer, String> record = new ProducerRecord<>("test", "shengzhen");
        producer.send(record, (metadata, ex) -> {
            System.out.println("topic = " + metadata.topic());
            System.out.println("partition = " + metadata.partition());
            System.out.println("offset = " + metadata.offset());
        });
    }

}

2、生产端执行入口

package producer;

import java.io.IOException;

public class OneProducerTest {

    public static void main(String[] args) throws IOException {
        OneProducer producer = new OneProducer();
        producer.sendMsg();
        System.in.read();
    }
}

三、消费端

1、消费端执行代码

package consumer;

import kafka.utils.ShutdownableThread;
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 java.util.Collections;
import java.util.Properties;

public class OneConsumer extends ShutdownableThread {
    private KafkaConsumer<Integer, String> consumer;

    //ConsumerConfig类包含properties的Key
    public OneConsumer() {
        // 两个参数:
        // 1)指定当前消费者名称
        // 2)指定消费过程是否会被中断
        super("KafkaConsumerTest", false);
        //ConsumerConfig
        Properties properties = new Properties();
        String brokers = "39.97.176.160:9092";
        // 指定kafka集群
        properties.put("bootstrap.servers", brokers);
        // 指定消费者组ID
        properties.put("group.id", "cityGroup1");
        // 开启自动提交,默认为true
        properties.put("enable.auto.commit", "true");
        // 指定自动提交的超时时限,默认5s
        properties.put("auto.commit.interval.ms", "1000");
        // 指定消费者被broker认定为挂掉的时限。若broker在此时间内未收到当前消费者发送的心跳,则broker
        // 认为消费者已经挂掉。默认为10s
        properties.put("session.timeout.ms", "30000");
        // 指定两次心跳的时间间隔,默认为3s,一般不要超过session.timeout.ms的 1/3
        properties.put("heartbeat.interval.ms", "10000");
        // 当kafka中没有指定offset初值时,或指定的offset不存在时,从这里读取offset的值。其取值的意义为:
        // earliest:指定offset为第一条offset
        // latest: 指定offset为最后一条offset
        properties.put("auto.offset.reset", "earliest");
        // 指定key与value的反序列化器
        properties.put("key.deserializer",
                "org.apache.kafka.common.serialization.IntegerDeserializer");
        properties.put("value.deserializer",
                "org.apache.kafka.common.serialization.StringDeserializer");

        this.consumer = new KafkaConsumer<Integer, String>(properties);
    }

    @Override
    public void doWork() {
        // 订阅消费主题
        consumer.subscribe(Collections.singletonList("test"));
        // 从broker摘取消费。参数表示,若buffer中没有消费,消费者等待消费的时间。
        // 0,表示没有消息什么也不返回
        // >0,表示当时间到后仍没有消息,则返回空
        ConsumerRecords<Integer, String> records = consumer.poll(4000);
        for(ConsumerRecord record : records) {
            System.out.println("topic = " + record.topic());
            System.out.println("partition = " + record.partition());
            System.out.println("key = " + record.key());
            System.out.println("value = " + record.value());
        }
    }
}

2、消费端执行入口

package consumer;

public class OneConsumerTest {
    public static void main(String[] args) {
        OneConsumer consumer = new OneConsumer();
        consumer.start();
    }
}

三、问题记录

listeners:配置阿里云内网ip

advertised.listeners:配置阿里云外网ip

zookeeper.connect:配置阿里云外网ip

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Kafka 2.4.1是Apache Kafka的一个版本,它提供了一套API,为开发者提供了各种功能和工具,用于构建和管理Kafka集群以及处理数据流。 KafkaAPI包括: 1. Producer API:用于向Kafka发送消息,将数据发送到Kafka集群的topic中。开发者可以通过API设置消息的键和值,以及指定使用的分区。 2. Consumer API:用于从Kafka读取消息,从指定的topic中消费数据。开发者可以通过API指定要消费的topic和分区,并处理从Kafka读取的消息。 3. Streams API:用于构建实时流处理应用程序,将数据流转换为处理和分析的结果。开发者可以使用Streams API来处理输入流并生成输出流,同时进行聚合、过滤、转换等操作。 4. Connect API:用于将Kafka与其他数据存储系统和源集成。开发者可以使用Connect API来编写连接器,将Kafka与外部系统集成,以实现数据的传输和同步。 5. Admin API:用于管理Kafka集群,包括创建和删除topics、分区的增删改查、配置的管理等操作。开发者可以使用Admin API进行集群管理和监控。 除此之外,Kafka提供了一些辅助工具和功能,用于简化和增强开发和管理体验。例如,Kafka提供了一个命令行工具kafka-console-consumer和kafka-console-producer,用于在命令行界面上进行消费和生产消息。Kafka还提供了一些监控工具,如Kafka Monitor和Kafka Manager,用于实时监控集群的状态和性能。 总之,Kafka 2.4.1的API提供了丰富的功能,使开发者能够方便地处理和管理数据流,构建可扩展和高性能的应用程序。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

2014Team

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值