The English version of quarkus.io is the official project site. Translated sites are community supported on a best-effort basis.

Kafka开发服务(Dev Services)

如果有任何Kafka相关的扩展(如 quarkus-smallrye-reactive-messaging-kafka ),Kafka开发服务会在开发模式和运行测试时自动启动一个Kafka broker。所以您不需要手动启动broker。这是由应用程序是自动配置的。

因为启动Kafka broker的时间可能很长,所以Kafka开发服务使用了 Redpanda ,这是一个与Kafka兼容的broker,而且启动时间仅为1秒左右。

启用/禁用Kafka开发服务

Kafka的开发服务是自动启用的,除非:

  • quarkus.kafka.devservices.enabled 被设置为 false

  • 配置了 kafka.bootstrap.servers

  • 所有的Reactive Messaging Kafka通道都设置了 bootstrap.servers 属性

Kafka的开发服务依赖于Docker来启动broker。如果您的环境不支持Docker,您需要手动启动broker,或者连接到一个已经运行的broker。您可以使用 kafka.bootstrap.servers 来配置broker地址。

共享的broker

大多数情况下,您需要在应用程序之间共享broker。Kafka的开发服务实现了一个 服务发现(service discovery) 机制,可以让您的多个在 开发 模式下运行的Quarkus应用程序共享一个broker。

Kafka开发服务用 quarkus-dev-service-kafka 标签来启动容器,该标签用于识别容器。

如果您需要多个(共享的)broker,您可以配置 quarkus.kafka.devservices.service-name 属性并指明broker的名称。它会查询一个具有相同名称的容器,如果找不到的话就启动一个新的容器。默认的服务名称是 kafka

在开发模式下,共享是默认启用的,但在测试模式下是禁用的。您可以用 quarkus.kafka.devservices.shared=false 停用共享。

设置端口

默认情况下,Kafka开发服务会随机挑选一个端口并配置应用程序。您可以通过配置 quarkus.kafka.devservices.port 属性来设置端口。

注意,Kafka的广告地址(advertised address)会自动配置为所选择的端口。

配置镜像

Kafka开发服务支持 RedpandaStrimzi (在 Kraft 模式下)。

Redpanda是一个兼容Kafka的事件流平台。因为它在dev服务默的 vectorized/redpanda 镜像中提供了更快的启动时间。您可以从 https://hub.docker.com/r/vectorized/redpanda 中选择任何版本。

Strimzi为在Kubernetes上运行Apache Kafka提供了容器镜像和Operator。虽然Strimzi针对Kubernetes进行了优化,但这些镜像在经典的容器环境中也能完美运行。Strimzi容器镜像在JVM上运行 "真实的 "Kafka broker,其启动速度较慢。

对于Strimzi,您可以从 https://quay.io/repository/strimzi-test-container/test-container?tab=tags ,选择任何可以获得Kraft支持的Kafka版本(2.8.1及以上)的镜像

quarkus.kafka.devservices.image-name=quay.io/strimzi-test-container/test-container:0.100.0-kafka-3.1.0

配置Kafka主题

您可以配置Kafka开发服务来在broker启动后创建主题。主题以给定的分区数量以及1个副本创建。

下面的例子创建了一个名为 test ,有3个分区的主题,以及另一个名为 messages ,有2个分区的主题。

quarkus.kafka.devservices.topic-partitions.test=3
quarkus.kafka.devservices.topic-partitions.messages=2

如果具有某个指定名称的主题已经存在,那么创建会被跳过,并且不会尝试对已经存在的主题重新分区到不同的数量。

您可以通过 quarkus.kafka.devservices.topic-partitions-timeout 来配置在主题创建中所使用的Kafka管理员客户端调用的超时时间,默认为2秒。

启用事务

默认情况下,Red Panda broker不会作为一个事务协调器来运行。如果想启用事务,请设置:

quarkus.kafka.devservices.redpanda.transaction-enabled=true
这同样会启用生产者幂等性支持。