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)会自动配置为所选择的端口。
配置镜像
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秒。