从 Quarkus 访问 Apache Kafka

本文介绍如何使用 Quarkus 开发微服务,这些微服务使用在 Kubernetes 集群中运行的 Apache Kafka。

Quarkus 支持 MicroProfile Reactive Messaging 与 Apache Kafka 进行交互。有一个很好的指南,将 Apache Kafka 与响应式消息传递一起使用,它解释了如何向 Kafka 发送和接收消息。

本指南包含有关如何使用 docker-compose 通过 Docker 在本地运行 Kafka 的说明。虽然这可能是最简单的入门方法,但对于微服务开发人员来说,下一步通常是弄清楚如何在 Kubernetes 环境或托管的 Kafka 服务中访问 Apache Kafka。

选项 1:在 Kubernetes 中运行 Apache Kafka
开源项目 Strimzi 提供了用于在 Kubernetes 和 Red Hat OpenShift 上运行 Apache Kafka 的容器镜像和运算符。在 Red Hat Developer 上有一个不错的博客系列,描述了如何使用 Strimzi。要从应用程序访问它,有几个不同的选项,例如 NodePorts、OpenShift 路由、负载均衡器和 Ingress。

有时,这些选项可能会让开发人员不知所措,尤其是当您只需要一个简单的开发环境来编写一些响应式 hello world 应用程序即可开始使用时。就我而言,我想在我的 Minikube 集群中安装一个简单的 Kafka 服务器。

有一个关于如何将 Strimzi 部署到 Minikube 的快速入门指南。不幸的是,它没有解释如何从应用程序访问它。

基于这两篇文章,我编写了一个简单的脚本,在不到 5 分钟的时间内将 Kafka 部署到 Minikube。该脚本是 cloud-native-starter 项目的一部分。运行以下命令试一试:

$ git clone https://github.com/IBM/cloud-native-starter.git
$ cd cloud-native-starter/reactive
$ sh scripts/start-minikube.sh
$ sh scripts/deploy-kafka.sh
$ sh scripts/show-urls.sh

最后一个命令的输出打印出 Kafka 引导服务器的 URL,下一步将需要该 URL。您可以在“Kafka”命名空间中找到所有资源。

要从 Quarkus 访问 Kafka,必须配置 Kafka 连接器。在与 Kafka 相同的 Kubernetes 集群中运行 Quarkus 应用程序时,请在“application.properties”中使用以下配置。“my-cluster-Kafka-external-bootstrap”是服务名称,“Kafka”是命名空间,“9094”是端口。

kafka.bootstrap.servers=my-cluster-kafka-external-bootstrap.kafka:9094
mp.messaging.incoming.new-article-created.connector=smallrye-kafka
mp.messaging.incoming.new-article-created.value.deserializer=org.apache.kafka.common.serialization.StringDeserializer

在本地开发 Quarkus 应用程序时,Minikube 中的 Kafka 是通过 NodePort 访问的。在这种情况下,请将 kafka.bootstrap.servers 配置替换为以下 URL:

$ minikubeip=$(minikube ip)
$ nodeport=$(kubectl get svc my-cluster-kafka-external-bootstrap -n kafka --ignore-not-found --output 'jsonpath={.spec.ports[*].nodePort}')
$ echo ${minikubeip}:${nodeport}

选项 2:Kafka 即服务
大多数云提供商还托管托管 Kafka 服务。例如,Event Streams 是 IBM Cloud 中的托管 Kafka 服务。有一个免费的精简计划,它提供对多租户事件流群集中单个分区的访问。您只需要一个 IBM ID,它是免费的,您不需要信用卡。

与生产中的大多数 Kafka 服务一样,事件流需要安全连接。需要再次在“application.properties”中定义此附加配置。

kafka.bootstrap.servers=broker-0-YOUR-ID.kafka.svc01.us-south.eventstreams.cloud.ibm.com:9093,broker-4-YOUR-ID.kafka.svc01.us-south.eventstreams.cloud.ibm.com:9093,...MORE-SERVERS
mp.messaging.incoming.new-article-created.connector=smallrye-kafka
mp.messaging.incoming.new-article-created.value.deserializer=org.apache.kafka.common.serialization.StringDeserializer
mp.messaging.incoming.new-article-created.sasl.mechanism=PLAIN
mp.messaging.incoming.new-article-created.security.protocol=SASL_SSL
mp.messaging.incoming.new-article-created.ssl.protocol=TLSv1.2
mp.messaging.incoming.new-article-created.sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username="token" password="YOUR-PASSWORD";

要输入此信息,您需要 1。Kafka 引导服务器列表和 2.事件流服务的密码。您可以在 Event Streams 服务的 Web 前端接收此信息,也可以使用 IBM Cloud CLI。

我的同事 Harald Uebele 开发了一个脚本,该脚本以编程方式创建服务并返回这两条信息。

后续步骤
本文中提到的脚本是 cloud-native-starter 项目的一部分,该项目描述了如何使用 Quarkus 开发响应式应用程序。我之前的文章描述了这个项目。

  • 22
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小徐博客

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

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

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

打赏作者

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

抵扣说明:

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

余额充值