如何在没有kafka服务器的情况下运行springboot

7kqas0il  于 2021-06-04  发布在  Kafka
关注(0)|答案(2)|浏览(441)

我有一个springboot项目,它的依赖项使用kafka进行日志记录。我无法摆脱上述依赖关系,因为我的逻辑需要来自该依赖关系的代码
我想在本地启动所说的应用程序而不运行kafka,这样我就可以测试我的简单db查找代码。
我试过禁用自动配置

spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.kafka.KafkaAutoConfiguration

我尝试通过bean配置将missingtopicsfaltal设置为false

@Bean(name = "kafkaListenerContainerFactory")
public ConcurrentKafkaListenerContainerFactory<?, ?> kafkaListenerContainerFactory(
    ConsumerFactory<Object, Object> kafkaConsumerFactor,
    ConcurrentKafkaListenerContainerFactoryConfigurer configurer) {

  ConcurrentKafkaListenerContainerFactory<Object, Object> factory =
      new ConcurrentKafkaListenerContainerFactory<>();
  configurer.configure(factory, kafkaConsumerFactor);

  ContainerProperties containerProperties = factory.getContainerProperties();
  containerProperties.setMissingTopicsFatal(false);

  ...
  return factory;
}

但是很明显,这个设置已经是错误的,因为我的应用程序运行时没有失败,只是tomcat不想打开listen端口
我遇到的所有其他解决方案都涉及到更改使用Kafka的代码;在本例中,我使用的依赖关系。但我无法改变这种依赖关系。
应用程序启动,但spring拒绝打开侦听端口,并继续循环错误

Connection to node -1 (localhost/127.0.0.1:9092) could not be established. Broker may not be available.

应用程序运行良好,kafka在本地运行,但由于kafka的资源使用,现在只需输入就很慢了。请帮忙。

30byixjq

30byixjq1#

在我看来,你的主要问题是当地Kafka安装的资源使用。也许先看看它的配置和数据。也许从刷新和清除所有本地数据开始?
或者,您可以在进程中运行kafkaserver,在主类中类似这样:

Properties kafkaProperties = new Properties();
    kafkaProperties.setProperty("broker.id", "1");
    kafkaProperties.setProperty("host.name", "localhost");
    kafkaProperties.setProperty("listeners", "PLAINTEXT://localhost:" + kafkaPort);
    kafkaProperties.setProperty("log.dir", Files.createTempDir().getAbsolutePath());
    KafkaConfig kafkaBrokerConfig = new KafkaConfig(kafkaBrokerConfig);
    KafkaServer kafkaServer = new KafkaServer(kafkaBrokerConfig, Time.SYSTEM);
    kafkaServer.startup();

或者你可以从docker那里找到Kafka。参见docker compose文件https://github.com/confluentinc/examples/tree/5.4.1-post/cp-all-in-one-community.
你可能只需要Zookeeper和经纪人:
docker-compose.yml码:

version: '2'
services:
  zookeeper:
    image: confluentinc/cp-zookeeper:5.4.1
    hostname: zookeeper
    container_name: zookeeper
    ports:
      - "2181:2181"
    environment:
      ZOOKEEPER_CLIENT_PORT: 2181
      ZOOKEEPER_TICK_TIME: 2000

  broker:
    image: confluentinc/cp-kafka:5.4.1
    hostname: broker
    container_name: broker
    depends_on:
      - zookeeper
    ports:
      - "29092:29092"
      - "9092:9092"
    environment:
      KAFKA_BROKER_ID: 1
      KAFKA_ZOOKEEPER_CONNECT: 'zookeeper:2181'
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://broker:29092,PLAINTEXT_HOST://localhost:9092
      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
      KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS: 0
d8tt03nd

d8tt03nd2#

您可以通过spring配置文件禁用整个kafkalistenercontainerFactorybean:

@Profile("!nokafka")
@Bean(name = "kafkaListenerContainerFactory")
public ConcurrentKafkaListenerContainerFactory<?, ?> kafkaListenerContainerFactory(){...}

并使用spring配置文件nokafka运行应用程序。
e、 g.使用最新的spring boot maven插件:

mvn spring-boot:run -Dspring-boot.run.profiles=nokafka

或通过java系统属性:

-Dspring.profiles.active=nokafka

相关问题