繁体   English   中英

Spring 启动Kafka监听器不一致

[英]Spring Boot Kafka listener is inconsistent

我试图让几个不同的 Spring 云微服务都连接到 Kafka/Zookeeper 集群,都在 Kubernetes 内。 微服务使用org.springframework.kafka:spring-kafka - 作为事件的消费者和生产者。

所有服务都可以连接到 kafka - 并且创建了主题; 但是每个服务的消费者非常不一致。

例如,当服务启动一次时,所有消费者都会监听该消息并调用 function。 但是,当我重新启动一切(包括kafka和zookeeper)时,它要么不起作用,要么不同服务中的一些消费者会起作用等等......

这是我的一些配置——我没有任何基于 Java 的配置——就在我的 application.yml 中,如下所示:

spring:

  ....

  kafka:
    consumer:
      bootstrap-servers: api-kafka.default.svc.cluster.local:9092
      auto-offset-reset: earliest
      key-deserializer: org.apache.kafka.common.serialization.StringDeserializer
      value-deserializer: org.apache.kafka.common.serialization.StringDeserializer
      group-id: api-event
      enable-auto-commit: false

    producer:
      bootstrap-servers: api-kafka.default.svc.cluster.local:9092
      key-serializer: org.apache.kafka.common.serialization.StringSerializer
      value-serializer: org.apache.kafka.common.serialization.StringSerializer
      ack-mode: manual

...

还有我的主要 class:

@EnableCaching
@SpringBootApplication
@EnableJpaRepositories
@EnableDiscoveryClient
@EnableKafka /* <<<<<<<------------- ENABLED HERE */
public class ExampleServiceApplication {

  public static void main(String[] args) {
    SpringApplication.run(ExampleServiceApplication.class, args);
  }

  .....
}

最后,我的消费者:

@Component
public class MessageListener {

  @KafkaListener(
      topics = "myTopic")
  public void eventListener(String serializedMessage) {
    try {
....

消息可以很好地发送到代理,但不会被其他服务使用。

我意识到没有映射到每个服务属性的主题,我如何通过 application.yml 做到这一点?

我敢打赌我犯了一个非常愚蠢的错误,但是是的! 我非常感谢任何评论或帮助

顺便说一句,你可以在这里阅读更多关于分区数量和并行消费者数量(具有相同组 id 的消费者)之间的关系。

https://docs.confluent.io/platform/current/streams/architecture.html

稍微简化一下,您的应用程序可以运行的最大并行度受 stream 任务的最大数量的限制,这本身取决于应用程序正在读取的输入主题的最大分区数。 例如,如果您的输入主题有 5 个分区,那么您最多可以运行 5 个应用程序实例。 这些实例将协作处理主题的数据。 如果您运行的应用程序实例数量多于输入主题的分区,“多余”的应用程序实例将启动但保持空闲; 但是,如果其中一个繁忙的实例出现故障,则其中一个空闲的实例将恢复前者的工作。 我们在常见问题解答中提供了更详细的解释和示例。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM