簡體   English   中英

Kafka 流中最有效的線程數

[英]Most efficient number of threads in Kafka streams

我將 Kafka Streams 用於一個主題(有 3 個分區)。

我想知道 Kafka Streams num.stream.threads 選項中最有效的線程數。

1 個線程和 3 個任務VS 3 個線程和 1 個任務(在每個線程中)哪個更好?

PS 服務器有 3 核 CPU。

答案是,視情況而定! 通常,擁有與分區/任務一樣多的線程會更有效,因為這將為您提供更好的並行性。 但是,如果您沒有足夠的 CPU,由於上下文切換,線程過多也可能是災難性的。

您還必須考慮要處理的數據的吞吐量,以及對每條記錄執行的操作成本。 如果您的流應用程序不是真正的數據密集型,您可能沒有興趣分配大量線程,因為它們大部分時間都處於空閑狀態。

因此,最好從單個線程開始並執行負載測試來衡量應用程序的性能。 為此,您可以使用 Apache kafka(或 Confluent)發行版中提供的命令行工具,即bin/kafka-producer-perf-test.sh並使用 JMX監控Kafka Streams 公開的指標(請參閱:監控Kafka Streams - Confluent 文檔)。

此外,您應該注意,您可以分配給應用程序的最大線程數並不完全等於您在拓撲中聲明的輸入主題的分區數。 實際上,您還應該考慮應用程序生成的所有子拓撲中的所有主題。

例如,假設您正在使用具有 3 個分區的流主題,但您的應用程序執行了重新分區操作。 然后,您將最終得到兩個子拓撲,每個子拓撲使用一個具有 3 個分區的主題。 因此,您總共將有 6 個任務,這意味着您最多可以配置 6 個線程。

注意:通常,建議使用單線程部署 KafkaStreams 實例,並通過添加更多實例進行水平擴展。 這簡化了擴展模型,尤其是在使用 Kubernetes 時(即 1 pod = 1 KafkaStreams 實例 = 1 線程)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM