当前位置: 首页 > 知识库问答 >
问题:

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

后源
2023-03-14

我有一个Spring boot项目,它有使用kafka进行日志记录的依赖项。我无法摆脱所述依赖项,因为我的逻辑需要来自该依赖项的代码

我已尝试禁用自动配置

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

我尝试通过bean配置将missingTopicsFatal设置为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不想打开侦听端口

应用程序启动,但spring拒绝打开侦听端口,并继续使用错误进行循环

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

在本地运行kafka的情况下,应用程序运行得很好,但由于kafka的资源使用情况,现在仅仅输入操作就会变慢。请帮帮忙。

共有1个答案

孔城
2023-03-14

在我看来,您的主要问题是本地kafka安装的资源使用问题。也许先看一下它的配置和数据。也许从fresh开始,清除所有本地数据?

或者,您可以在进程内运行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上运行Kafaka。例如,请参见docker-compose文件https://github.com/confluentinc/examples/tree/5.4.1-post/cp-all-in-one-community。

您可能只需要动物园管理员和经纪人:

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
 类似资料:
  • 问题内容: 我想问一下我是否可以在没有安装Web服务器的情况下运行php。我是否必须像CGI一样使用php并通过命令行运行我的页面?如果是这样,我必须通过安装php选择哪些步骤?我是说偏好设置为CGI以及该步骤之后的组件? 我安装了php 5.3.3,但似乎无法正常工作,我收到几则消息,提示缺少php5ts.dll,当我将该文件放在ext文件夹中时,会出现其他错误消息。是否需要使用任何配置文件或步

  • 我在我的项目中使用带有MongoDb和Elasticsearch的Springboot。当我的Elasticsearch服务器运行时,我的Springboot应用程序运行良好,但当Elasticsearch服务器停止时,我的Springboot应用程序也无法启动。根据我的项目要求,即使Elasticsearch服务器无法启动,我们的Springboot应用程序仍应运行,因为我们的大多数API都是基

  • 文档说这个库运行在GPU上。如果我功能强大的笔记本电脑没有GPU,我还能运行Deeplearning4J吗?

  • 我只需要"解除屏蔽"我的终端后...有一些选项或setpup为它? 注意:我的服务正在使用,因此假设不需要在命令行上使用。 PS:我需要保持容器运行,我不需要使用

  • 有没有一种方法可以在不启动Android Studio的情况下运行模拟器。可能是从命令行。我知道这个功能在旧版本中是可用的,从那以后就消失了。但也许有人知道怎么做了?

  • 我有一个包含不和谐机器人代码的Python脚本。当我运行它时,它会激活不和谐机器人,并显示机器人的在线状态。但是,当我结束python脚本时,它会禁用bot。即使离线,我如何在不使用服务器的情况下保持机器人活动?