【问题标题】:How to fix error from embedded kafka that cannot find meta.properties如何修复无法找到 meta.properties 的嵌入式 kafka 的错误
【发布时间】:2019-06-19 06:26:06
【问题描述】:

我正在尝试对使用 kafka、kafka-streams 和 cassandra 的应用程序进行集成测试。但是当我尝试设置测试类时,我遇到了 2 个错误: 错误 [main] BrokerMetadataCheckpoint:无法读取 dir 下的 meta.properties 文件 ERROR [main] KafkaServer: 无法读取日志目录下的 meta.properties

我正在使用 spring-boot-starter 2.1.2、spring-boot-starter-test 2.1.2、spring-kafka 2.2.0、spring-kafka-test 2.2.0、apache.kafka-streams 2.1.0

尝试更改 logs.dir 和 logs.dirs 参数。 使用@EnableKafka @EnableKafkaStreams

@RunWith(SpringRunner.class)
@SpringBootTest
@EmbeddedKafka(partitions = 3, controlledShutdown = false, count = 1, topics = {"zc.deviceposition"}, brokerProperties = {"listeners=PLAINTEXT://localhost:9092", "port=9092", "log.dir=/home/name/logs"})
@EmbeddedCassandra(timeout = 60000)
@CassandraDataSet(value = {"bootstrap_test.cql"}, keyspace = "statistics")
@ActiveProfiles("test")
@DirtiesContext
public class CassandraTripsAggregatorProcessorSupplierIntegrationTest {
  @Test
  public void someTest() {System.out.println("hello world");}
}

我希望使用嵌入式 kafka 运行上下文,但现在我收到一个错误,即 meta.properties 不存在

【问题讨论】:

  • 我建议稍微简化一下这个问题,因为它似乎与 Cassandra 或 Kafka Streams 没有任何关系。核心问题是 Kafka 服务器需要一个 meta.properties 文件,但 Spring 的 EmbeddedKafkaBroker 不会生成这样的文件用于测试目的(至少据我所知)。
  • 这是如何解决的?
  • 使用预定义环境在 docker 中创建,但我认为它与安装或卸载整个系统相同。所以它不是程序化的解决方案
  • 这个问题有什么问题吗?不幸的是,我仍然拥有它

标签: spring-boot-test embedded-kafka spring-kafka-test


【解决方案1】:

我检查了 kafka 源代码以了解实际情况:

抛出错误消息in this class。 在 kafka 服务器启动期间,如果 meta.properties 文件不存在(see here),则会读取并创建它。

所以我认为没有什么可以做的,因为它实际上不是一个错误,但可能是kafka代码中的日志级别不正确。

【讨论】:

    【解决方案2】:

    由于您在代理属性中使用自己的 log.dir,因此一种解决方案是在您的日志目录下创建一个 meta.properties 文件,并使用一些最低配置:

    version=0
    broker.id=0
    

    我还建议将该文件和目录放在项目的测试目录中的某个位置(即不一定在 /home/ 下),并确保在每次测试运行后正确清空它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-20
      • 1970-01-01
      • 2020-12-11
      • 1970-01-01
      • 1970-01-01
      • 2017-05-10
      • 1970-01-01
      相关资源
      最近更新 更多