005_kafka_Java_API
2024-10-11 06:07:05
1、生产者Producer
1)添加依赖
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka-clients</artifactId>
<version>0.10.0.0</version>
</dependency>
2)简单推送代码
文档参考:http://kafka.apache.org/0100/javadoc/index.html?org/apache/kafka/clients/producer/KafkaProducer.html
同步推送:
Properties props = new Properties(); props.put("bootstrap.servers", "localhost:9092");
props.put("acks", "all");
props.put("retries", );
props.put("batch.size", );
props.put("linger.ms", );
props.put("buffer.memory", );
props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer"); Producer<String, String> producer = new KafkaProducer<>(props); for(int i = ; i < ; i++)
producer.send(new ProducerRecord<String, String>("my-topic", Integer.toString(i), Integer.toString(i))); producer.close();
异步推送:
public Future<RecordMetadata> send(ProducerRecord<K,V> record,Callback callback)
对比:
If you want to simulate a simple blocking call you can call the get() method immediately: byte[] key = "key".getBytes();
byte[] value = "value".getBytes();
ProducerRecord<byte[],byte[]> record = new ProducerRecord<byte[],byte[]>("topic1", key, value)
producer.send(record).get(); Fully non-blocking usage can make use of the Callback parameter to provide a callback that will be invoked when the request is complete. ProducerRecord<byte[],byte[]> record = new ProducerRecord<byte[],byte[]>("topic1", key, value);
producer.send(myRecord,
new Callback() {
public void onCompletion(RecordMetadata metadata, Exception e) {
if(e != null)
e.printStackTrace();
System.out.println("The offset of the record we just sent is: " + metadata.offset());
}
});
2、消费者Consumer
1)添加依赖
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka-clients</artifactId>
<version>0.10.0.0</version>
</dependency>
2)简单拉取代码
更多请查看:http://kafka.apache.org/0100/javadoc/index.html?org/apache/kafka/clients/consumer/KafkaConsumer.html
Properties props = new Properties();
props.put("bootstrap.servers", "localhost:9092");
props.put("group.id", "test");
props.put("enable.auto.commit", "true");
props.put("auto.commit.interval.ms", "");
props.put("session.timeout.ms", "");
props.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
props.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
KafkaConsumer<String, String> consumer = new KafkaConsumer<>(props);
consumer.subscribe(Arrays.asList("foo", "bar"));
while (true) {
ConsumerRecords<String, String> records = consumer.poll();
for (ConsumerRecord<String, String> record : records)
System.out.printf("offset = %d, key = %s, value = %s",
record.offset(), record.key(), record.value());
}
附上以验证通过的producer推送代码:
public RecordMetadata sendSyncKafkaRequest(String topic, KeyModel keyModel, Object message) { logger.info("=== 推送服务开始:sendSyncKafkaRequest start ===");
logger.info("=== topic: " + topic + "===");
logger.info("=== keyModel: " + JSON.toJSONString(keyModel) + "===");
logger.info("=== message: " + JSON.toJSONString(message) + "==="); Properties props = kafkaProducerProperties.getProperties();
KafkaProducer<KeyModel, Object> producer = null;
RecordMetadata recordMetadata = null;
try {
producer = new KafkaProducer<KeyModel, Object>(props);
recordMetadata = producer.send(new ProducerRecord<KeyModel, Object>(topic, keyModel, message)).get();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
} if (recordMetadata != null) {
logger.info("===kafka请求推送成功!Topic:" + recordMetadata.topic() + ";分区:" + recordMetadata.partition() + "===");
} else {
logger.info("=== recordMetadata为 null!本次kafka 写入请求没有完成!===");
} return recordMetadata;
}
最新文章
- backup1:开始数据库备份
- SYN攻击
- sql语句:插入的时候判断是否有重复项
- 跟着百度学PHP[4]OOP面对对象编程-8-继承
- Mule ESB 社区版 企业版 资源下载 包含3.5和3.6
- java中产生对象的两种方式
- C# 程序性能提升篇-1、装箱和拆箱,枚举的ToString浅析
- jni java和C之间的值传递(int String int[])
- EF 请求数据是缓存 求大神解释
- Custom Data Service Providers
- Excel教程(2) - 函数的参数
- Android截图命令screencap
- Python网络编程(1)-socket
- Mysql引擎中MyISAM和InnoDB的区别有哪些?
- linux下连接windows的远程桌面
- C# / VB.NET合并PDF指定页
- Laravel篇之Laravel的安装及使用
- UOJ#310. 【UNR #2】黎明前的巧克力(FWT)
- __attribute__ 机制详解(一)
- docker 系列 - 基础镜像环境和Docker常用命令整理
热门文章
- [SQL入门级] 第一天 SQL初步
- 用shell脚本监控进程是否存在 不存在则启动的实例
- [已解决] git 重命名文件夹
- js爬虫心得
- MVC中view和controller相互传值的方法
- OC-内存管理
- 关键字nullable,nonnull,null_resettable,_Null_unspecified详解
- github在liunx上的搭建
- (转)jQuery源码解读 -- jQuery v1.10.2
- Java SE 基础:标识(zh&#236;)符