簡體   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