使用 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的更多相关文章

  1. 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 ...

  2. SPRING 集成 KAFKA 发送消息

    准备工作 1.安装kafka+zookeeper环境 2.利用命令创建好topic,创建一个topic my-topic 集成步骤 1.配置生产者 <?xml version="1.0 ...

  3. asp.net core mcroservices 架构之 分布式日志(三):集成kafka

    一 kafka介绍 kafka是基于zookeeper的一个分布式流平台,既然是流,那么大家都能猜到它的存储结构基本上就是线性的了.硬盘大家都知道读写非常的慢,那是因为在随机情况下,线性下,硬盘的读写 ...

  4. Spring boot 集成Kafka

    搭建Kafka集群,参考: https://www.cnblogs.com/jonban/p/kafka.html 源码示例如下: 1.新建 Maven 项目 kafka 2.pom.xml < ...

  5. springboot集成Kafka

    kafka和MQ的区别: 1)在架构模型方面, RabbitMQ遵循AMQP协议,RabbitMQ的broker由Exchange,Binding,queue组成,其中exchange和binding ...

  6. java.io.NotSerializableException: org.apache.kafka.clients.consumer.ConsumerRecord

    kafka 与spark集成 序列化问题 sparkConf.set("spark.serializer", "org.apache.spark.serializer.K ...

  7. Storm集成Kafka应用的开发

    我们知道storm的作用主要是进行流式计算,对于源源不断的均匀数据流流入处理是非常有效的,而现实生活中大部分场景并不是均匀的数据流,而是时而多时而少的数据流入,这种情况下显然用批量处理是不合适的,如果 ...

  8. springboot 1.5.2 集成kafka 简单例子

    添加依赖 compile("org.springframework.kafka:spring-kafka:1.1.2.RELEASE") 添加application.propert ...

  9. 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 ...

  10. SpringCloud学习之SpringCloudStream&集成kafka

    一.关于Spring-Cloud-Stream Spring Cloud Stream本质上就是整合了Spring Boot和Spring Integration,实现了一套轻量级的消息驱动的微服务框 ...

随机推荐

  1. Angular Material 18+ 高级教程 – CDK Observers

    前言 Observers 是 Angular Material 对游览器原生 MutationObserver 的上层封装.主要用于监听 add/remove Node. 不熟悉的朋友可以先看这篇 D ...

  2. RxJS 系列 – Transformation Operators

    前言 前几篇介绍过了 Creation Operators Filter Operators Join Creation Operators Error Handling Operators 这篇继续 ...

  3. [OI] 莫比乌斯函数与莫比乌斯反演

    9. 莫比乌斯函数与莫比乌斯反演 9.1 莫比乌斯函数 9.1.1 定义 设 \(\mu\) 为莫比乌斯函数,则有: \[\mu(x)=\begin{cases}1\qquad (n=1)\\ 0\q ...

  4. 第24天:安全开发-PHP应用&文件管理模块&显示上传&黑白名单类型过滤&访问控制

    #文件管理模块-上传-过滤机制 1.无过滤机制 2.黑名单过滤机制 3.白名单过滤机制 4.文件类型过滤机制 $_FILES:PHP中一个预定义的超全局变量,用于在上传文件时从客户端接收文件,并将其保 ...

  5. 第22天:安全开发-PHP应用&留言板功能&超全局变量&数据库操作&第三方插件引用

    #数据库操作-mysqli函数&增删改查 PHP函数:连接,选择,执行,结果,关闭等 参考:https://www.runoob.com/php/php-ref-mysqli.html 常用: ...

  6. USB ncm虚拟网卡

    NCM介绍 1 功能 USB NCM,属于USB-IF定义的CDC(Communication Device Class)下的一个子类:Network Control Model,用于Host和Dev ...

  7. OpenCL架构

    OpenCL提供了一种统一的编程接口,使得程序员可以编写一次代码,然后在多种处理器上运行. 平台模型 OpenCL平台总是包括一个宿主机(host).宿主机与OpenCL程序外部的环境交互,包括I/O ...

  8. 神经网络之卷积篇:详解残差网络为什么有用?(Why ResNets work?)

    详解残差网络为什么有用? 为什么ResNets能有如此好的表现,来看个例子,它解释了其中的原因,至少可以说明,如何构建更深层次的ResNets网络的同时还不降低它们在训练集上的效率.通常来讲,网络在训 ...

  9. manim边学边做--极坐标平面

    PolarPlane,顾名思义,是用于创建极坐标平面的类. 与笛卡尔坐标系不同,极坐标系是基于角度和半径来定位点的,这里的每个点由一个角度和距离原点的距离表示. 在Manim中,PolarPlane通 ...

  10. 本文是第一篇在GitHub仓库中撰写的.md格式的blog文件

    正文内容: 具体内容,只是未来测试,给出福利: 模板格式: title: 博文标题 description: 博文摘要 #多个标签请使用英文逗号分隔或使用数组语法 tags: 标签1, 标签2 #多个 ...