solon 集成 kafka-clients
使用 kafka-clients 原本是比较简单的事情。但有些同学习惯了 spring-kafka 后,对原始 java 接口会陌生些。会希望有个集成的示例。
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka-clients</artifactId>
<version>${kafka.version}</version>
</dependency>
现在我们使用原始 sdk 的依赖包,做一个 solon 项目的集成分享(其它的框架,也可以参考此例)。
1、添加集成配置
- 添加 yml 配置(具体的配置属性,参考:ProducerConfig,ConsumerConfig)
solon.app:
name: "demo-app"
group: "demo"
solon.logging:
logger:
root:
level: INFO
# 配置可以自由定义,与 @Bean 代码对应起来即可(以下为参考)
solon.kafka:
properties: #公共配置(配置项,参考:ProducerConfig,ConsumerConfig 的公用部分)
bootstrap:
servers: "127.0.0.1:9092"
key:
serializer: "org.apache.kafka.common.serialization.StringSerializer"
deserializer: "org.apache.kafka.common.serialization.StringDeserializer"
value:
serializer: "org.apache.kafka.common.serialization.StringSerializer"
deserializer: "org.apache.kafka.common.serialization.StringDeserializer"
producer: #生产者专属配置(配置项,参考:ProducerConfig)
acks: "all"
consumer: #消费者专属配置(配置项,参考:ConsumerConfig)
enable:
auto:
commit: "false"
isolation:
level: "read_committed"
group:
id: "${solon.app.group}:${solon.app.name}"
- 添加 java 配置器
@Configuration
public class KafkaConfig {
@Bean
public KafkaProducer<String, String> producer(@Inject("${solon.kafka.properties}") Properties common,
@Inject("${solon.kafka.producer}") Properties producer) {
Properties props = new Properties();
props.putAll(common);
props.putAll(producer);
return new KafkaProducer<>(props);
}
@Bean
public KafkaConsumer<String, String> consumer(@Inject("${solon.kafka.properties}") Properties common,
@Inject("${solon.kafka.consumer}") Properties consumer) {
Properties props = new Properties();
props.putAll(common);
props.putAll(consumer);
return new KafkaConsumer<>(props);
}
}
完成上面两步,就算是集成了(后面,是应用的事儿)。配置也可以没有,直接写代码设定属性。
2、应用
- 发送(或生产),这里代控制器由用户请求再发送消息(仅供参考):
@Controller
public class DemoController {
@Inject
private KafkaProducer<String, String> producer;
@Mapping("/send")
public void send(String msg) {
//发送
producer.send(new ProducerRecord<>("topic.test", msg));
}
}
- 拉取(或消费),这里采用定时拦取方式:(仅供参考)
@Component
public class DemoJob {
@Inject
private KafkaConsumer<String, String> consumer;
@Init
public void init() {
//订阅
consumer.subscribe(Arrays.asList("topic.test"));
}
@Scheduled(fixedDelay = 10_000L, initialDelay = 10_000L)
public void job() throws Exception {
//拉取
ConsumerRecords<String, String> records = consumer.poll(Duration.ofSeconds(10));
for (ConsumerRecord<String, String> record : records) {
System.out.println(record.value());
//确认
consumer.commitSync();
}
}
}
solon 集成 kafka-clients的更多相关文章
- CDH下集成spark2.2.0与kafka(四十一):在spark+kafka流处理程序中抛出错误java.lang.NoSuchMethodError: org.apache.kafka.clients.consumer.KafkaConsumer.subscribe(Ljava/util/Collection;)V
错误信息 19/01/15 19:36:40 WARN consumer.ConsumerConfig: The configuration max.poll.records = 1 was supp ...
- SPRING 集成 KAFKA 发送消息
准备工作 1.安装kafka+zookeeper环境 2.利用命令创建好topic,创建一个topic my-topic 集成步骤 1.配置生产者 <?xml version="1.0 ...
- asp.net core mcroservices 架构之 分布式日志(三):集成kafka
一 kafka介绍 kafka是基于zookeeper的一个分布式流平台,既然是流,那么大家都能猜到它的存储结构基本上就是线性的了.硬盘大家都知道读写非常的慢,那是因为在随机情况下,线性下,硬盘的读写 ...
- Spring boot 集成Kafka
搭建Kafka集群,参考: https://www.cnblogs.com/jonban/p/kafka.html 源码示例如下: 1.新建 Maven 项目 kafka 2.pom.xml < ...
- springboot集成Kafka
kafka和MQ的区别: 1)在架构模型方面, RabbitMQ遵循AMQP协议,RabbitMQ的broker由Exchange,Binding,queue组成,其中exchange和binding ...
- java.io.NotSerializableException: org.apache.kafka.clients.consumer.ConsumerRecord
kafka 与spark集成 序列化问题 sparkConf.set("spark.serializer", "org.apache.spark.serializer.K ...
- Storm集成Kafka应用的开发
我们知道storm的作用主要是进行流式计算,对于源源不断的均匀数据流流入处理是非常有效的,而现实生活中大部分场景并不是均匀的数据流,而是时而多时而少的数据流入,这种情况下显然用批量处理是不合适的,如果 ...
- springboot 1.5.2 集成kafka 简单例子
添加依赖 compile("org.springframework.kafka:spring-kafka:1.1.2.RELEASE") 添加application.propert ...
- Error when sending message to topic test with key: null, value: 2 bytes with error: (org.apache.kafka.clients.producer.internals.ErrorLoggingCallback)
windows下使用kafka遇到这个问题: Error when sending message to topic test with key: null, value: 2 bytes with ...
- SpringCloud学习之SpringCloudStream&集成kafka
一.关于Spring-Cloud-Stream Spring Cloud Stream本质上就是整合了Spring Boot和Spring Integration,实现了一套轻量级的消息驱动的微服务框 ...
随机推荐
- 游览器 reflow
refer: https://juejin.im/post/5a9372895188257a6b06132e reflow 伤性能. 所以要闪. 有几个频密触发的东西要留意. 1. scroll 2. ...
- 使用 Wake Lock API:保持设备唤醒的最佳实践
在现代 Web 应用中,尤其是涉及视频播放.实时通信.地图导航等长时间运行的任务时,用户常常希望设备不要因为空闲而自动进入睡眠模式或屏幕变暗.为了解决这一问题,Web API 提供了一个名为 Wake ...
- 实战合集 | I/O 2021 Flutter 研讨会
2021 年的 Google I/O 大会已圆满闭幕,本次大会带来了诸多关于各项谷歌开发技术产品的最新更新.在此次 I/O,Flutter 发布了 2.2 版本,包括 Web 版的增强.更多 Mate ...
- Windows系统之“关闭windows 文件夹分组”
不知道怎么就按出来了 文件夹分组 ,也不知道怎么关闭,别扭了好久 解决办法: 右键点击文件夹空白处,选择 "分组依据" --> 然后选择 "无"
- o1 式开源推理链项目 g1:可基于 Llama 3.2-90b 模型
g1 简介 g1 是一个开源项目,利用 Llama 3.1 70b 模型在 Groq 硬件上实现类似 OpenAI o1 的推理链能力.项目通过精心设计的提示策略引导语言模型进行逐步推理,解决了传统语 ...
- 【USB3.0协议学习】Topic3·三种Reset Events分析
USB3.0中的三种Reset Events 1. PowerOn Reset PowerOn Reset被用来代指上电复位,当一个device接入到root hub或者外置hub的时候,该devic ...
- Linux:/proc/meminfo参数详细解释
Linux:/proc/meminfo参数详细解释 一.Linux内存总览图 二.meminfo参数的详细介绍 /proc/meminfo是了解Linux系统内存使用状况的主要接口,我们最常用的&qu ...
- 04 Transformer 中的位置编码的 Pytorch 实现
1:10 点赞 16:00 我爱你 你爱我 1401 class PositionalEncoding(nn.Module): def __init__(self, dim, dropout, max ...
- URL是什么
URL是什么 URL(Uniform Resource Locator,统一资源定位器) URL的组成: 协议://{域名|主机名|IP}:端口/路径/文件名?参数#锚点 协议 Scheme/Prot ...
- Centos 安装 supervisord服务
安装supervisord 执行如下命令安装supervisord yum install epel-release -y yum install supervisor -y 设置开机启动superv ...