使用 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 – Language Service

    介绍 Angular Language Service 是一个针对 Angular 项目的程序静态分析 (Program Static Analysis) 工具,它的作用是提升开发体验. 很多 IDE ...

  2. MyBatis——案例——修改(修改全部字段,修改动态字段)

    修改-修改全部字段   1.编写接口方法:Mapper接口     参数:所有数据     结果:void(通过异常捕获判断成功修改与否)        int (表示sql语句影响的行数) /** ...

  3. 邀请你参与字节跳动 UME 插件开发竞赛

    UME 是由字节跳动 Flutter Infra 团队出品和维护的 Flutter 应用内调试工具.通过在 Flutter 应用中加入 UME 工具,开发者们可以直接在应用内查看调试信息,而无需使用 ...

  4. 课时05:Linux必备系统命令

  5. IDEA更改远程git仓库地址

    前言 我们在使用IDEA开发时,一般会配置好对应的git仓库,这样就比较容易对代码进行控制以及协同开发.   但有时候,我们远程的仓库地址由于这样那样的原因,需要迁移(这在爱折腾的企业是常有的事情). ...

  6. CF1661 Educational Codeforces Round 126 (Rated for Div. 2) 题解

    感觉,越来越拉胯了,有点难过,明天希望可以好好学习,好好准备考研!八成新的自己我来力! A Array Balancing 很明显的签到题,要求两个数组各自的相邻项差的绝对值最小,设\(mn=\min ...

  7. 树形结构数据 数组对象 按照 sort 字段排序

    export function sortTreeData (data, flag) { let arr = [] if (flag === 1) { arr = data[0].children } ...

  8. 「模拟赛」多校 A 层联训 8

    \(22pts\),本来可以切掉前两个题的?! A. 传送 (teleport) 签到 12 pts,错的很唐!我把 Dij 用的 dis 数组直接赋值成了点到 1 号点之间的 x 距离和 y 距离的 ...

  9. C# 动态调用webservice代码

    /// <summary> /// 动态调用WebService /// </summary> /// <param name="url">UR ...

  10. SpringBoot项目集成MinIO

    一.MinIO的下载安装以及基本使用 1.下载地址:https://dl.min.io/server/minio/release/windows-amd64/minio.exe 2.下载好后需要手动创 ...