Как запустить Springboot без сервера Kafka - PullRequest
0 голосов
/ 15 апреля 2020

У меня есть загрузочный проект Spring, в котором есть зависимости, использующие kafka для ведения журнала. Я не могу избавиться от указанной зависимости, потому что мой лог c требует кода из этой зависимости

Я хочу запустить указанное приложение локально, не запуская kafka, чтобы я мог протестировать свой простой код поиска в БД.

Я попытался отключить автоконфигурацию

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

Я попытался установить falseTopicsFatal в значение 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 не хочет открывать порт прослушивания

Все другие решения, с которыми я сталкивался, включают изменение кода, в котором используется kafka; в этом случае зависимость я использую. Но у меня нет доступа к изменению указанной зависимости.

Приложение запускается, но Spring отказывается открывать порт прослушивания и продолжает цикл с ошибкой

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

Приложение работает нормально с локальным запуском kafka за исключением того, что сам процесс набора текста медленен благодаря использованию ресурсов kafka. Пожалуйста, помогите.

Ответы [ 2 ]

0 голосов
/ 16 апреля 2020

Вы можете отключить весь bean-компонент kafkaListenerContainerFactory с помощью профиля Spring:

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

и запустить свое приложение с пружинным профилем 'nokafka'.

Например, используя последний подключаемый модуль maven с пружинной загрузкой :

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

Или через java Системные свойства:

-Dspring.profiles.active=nokafka
0 голосов
/ 15 апреля 2020

Мне кажется, ваша главная проблема - использование ресурсов вашей локальной установки kafka. Может быть, сначала взгляните на его конфигурацию и данные. Может быть, начать с fre sh и очистить все локальные данные?

В качестве альтернативы, вы можете запустить 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. Смотрите, например, docker -композитный файл 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...