Optimierung der Datenkommunikation: Milvus setzt auf NATS Messaging
Im komplexen Geflecht der Datenverarbeitung ist nahtlose Kommunikation der Faden, der Abläufe miteinander verbindet. Milvus, die wegweisende Open-Source-Vektordatenbank, hat mit ihrer neuesten Funktion eine transformative Reise begonnen: der NATS-Messaging-Integration. In diesem umfassenden Blogbeitrag entwirren wir die Feinheiten dieser Integration und untersuchen ihre Kernfunktionen, den Einrichtungsprozess, die Migrationsvorteile und wie sie im Vergleich zu ihrem Vorgänger RocksMQ abschneidet.
Die Rolle von Message Queues in Milvus verstehen
In der cloud-nativen Architektur von Milvus ist die Message Queue, oder der Log Broker, von zentraler Bedeutung. Sie ist das Rückgrat, das persistente Datenströme, Synchronisierung, Ereignisbenachrichtigungen und Datenintegrität während Systemwiederherstellungen sicherstellt. Traditionell war RocksMQ im Milvus Standalone-Modus die naheliegendste Wahl, insbesondere im Vergleich zu Pulsar und Kafka, doch seine Einschränkungen wurden bei umfangreichen Daten und komplexen Szenarien deutlich.
Milvus 2.3 führt NATS ein, eine Single-Node-MQ-Implementierung, die neu definiert, wie Datenströme verwaltet werden. Im Gegensatz zu seinen Vorgängern befreit NATS Milvus-Nutzer von Leistungsbeschränkungen und bietet ein nahtloses Erlebnis bei der Verarbeitung erheblicher Datenmengen.
Was ist NATS?
NATS ist eine in Go implementierte Konnektivitätstechnologie für verteilte Systeme. Es unterstützt verschiedene Kommunikationsmodi wie Request-Reply und Publish-Subscribe über Systeme hinweg, bietet Datenpersistenz durch JetStream und stellt verteilte Fähigkeiten durch integriertes RAFT bereit. Für ein detaillierteres Verständnis von NATS können Sie die offizielle NATS-Website konsultieren.
Im Milvus 2.3 Standalone-Modus stellen NATS, JetStream und PubSub Milvus robuste MQ-Fähigkeiten bereit.
NATS aktivieren
Milvus 2.3 bietet eine neue Steuerungsoption, mq.type, mit der Nutzer den Typ der MQ angeben können, den sie verwenden möchten. Um NATS zu aktivieren, setzen Sie mq.type=natsmq. Wenn Sie nach dem Starten von Milvus-Instanzen Logs sehen, die den untenstehenden ähneln, haben Sie NATS erfolgreich als Message Queue aktiviert.
[INFO] [dependency/factory.go:83] ["try to init mq"] [standalone=true] [mqType=natsmq]
NATS für Milvus konfigurieren
Zu den Anpassungsoptionen von NATS gehören die Angabe des Listening-Ports, des JetStream-Speicherverzeichnisses, der maximalen Payload-Größe und des Initialisierungs-Timeouts. Die Feinabstimmung dieser Einstellungen gewährleistet optimale Leistung und Zuverlässigkeit.
natsmq:
server: # server side configuration for natsmq.
port: 4222 # 4222 by default, Port for nats server listening.
storeDir: /var/lib/milvus/nats # /var/lib/milvus/nats by default, directory to use for JetStream storage of nats.
maxFileStore: 17179869184 # (B) 16GB by default, Maximum size of the 'file' storage.
maxPayload: 8388608 # (B) 8MB by default, Maximum number of bytes in a message payload.
maxPending: 67108864 # (B) 64MB by default, Maximum number of bytes buffered for a connection Applies to client connections.
initializeTimeout: 4000 # (ms) 4s by default, waiting for initialization of natsmq finished.
monitor:
trace: false # false by default, If true enable protocol trace log messages.
debug: false # false by default, If true enable debug log messages.
logTime: true # true by default, If set to false, log without timestamps.
logFile: /tmp/milvus/logs/nats.log # /tmp/milvus/logs/nats.log by default, Log file path relative to .. of milvus binary if use relative path.
logSizeLimit: 536870912 # (B) 512MB by default, Size in bytes after the log file rolls over to a new one.
retention:
maxAge: 4320 # (min) 3 days by default, Maximum age of any message in the P-channel.
maxBytes: # (B) None by default, How many bytes the single P-channel may contain. Removing oldest messages if the P-channel exceeds this size.
maxMsgs: # None by default, How many message the single P-channel may contain. Removing oldest messages if the P-channel exceeds this limit.
Hinweis:
Sie müssen
server.portangeben, damit der NATS-Server lauscht. Bei einem Portkonflikt kann Milvus nicht starten. Setzen Sieserver.port=-1, um zufällig einen Port auszuwählen.storeDirgibt das Verzeichnis für den JetStream-Speicher an. Wir empfehlen, das Verzeichnis auf einem leistungsstarken Solid-State-Laufwerk (SSD) zu speichern, um einen besseren Lese-/Schreibdurchsatz von Milvus zu erzielen.maxFileStorelegt die Obergrenze für die JetStream-Speichergröße fest. Das Überschreiten dieses Limits verhindert weiteres Schreiben von Daten.maxPayloadbegrenzt die Größe einzelner Nachrichten. Sie sollten diesen Wert über 5 MB halten, um Schreibablehnungen zu vermeiden.initializeTimeoutsteuert das Zeitlimit für den Start des NATS-Servers.monitorkonfiguriert die unabhängigen Protokolle von NATS.retentionsteuert den Aufbewahrungsmechanismus von NATS-Nachrichten.
Weitere Informationen finden Sie in der offiziellen NATS-Dokumentation.
Migration von RocksMQ zu NATS
Die Migration von RocksMQ zu NATS ist ein nahtloser Prozess, der Schritte wie das Stoppen von Schreibvorgängen, das Leeren von Daten, das Ändern von Konfigurationen und das Überprüfen der Migration anhand von Milvus-Protokollen umfasst.
Stoppen Sie vor Beginn der Migration alle Schreibvorgänge in Milvus.
Führen Sie den Vorgang
FlushALLin Milvus aus und warten Sie auf dessen Abschluss. Dieser Schritt stellt sicher, dass alle ausstehenden Daten geleert werden und das System zum Herunterfahren bereit ist.Ändern Sie die Milvus-Konfigurationsdatei, indem Sie
mq.type=natsmqsetzen und relevante Optionen im Abschnittnatsmqanpassen.Starten Sie Milvus 2.3.
Sichern und bereinigen Sie die ursprünglichen Daten, die im Verzeichnis
rocksmq.pathgespeichert sind. (Optional)
NATS vs. RocksMQ: Ein Performance-Showdown
Pub/Sub-Performance-Tests
Testplattform: M1 Pro Chip / Speicher: 16 GB
Testszenario: Wiederholtes Abonnieren und Veröffentlichen zufälliger Datenpakete in einem Thema, bis das zuletzt veröffentlichte Ergebnis empfangen wird.
Ergebnisse:
Bei kleineren Datenpaketen (< 64 KB) übertrifft RocksMQ NATS in Bezug auf Speicher, CPU und Antwortgeschwindigkeit.
Bei größeren Datenpaketen (> 64 KB) übertrifft NATS RocksMQ und bietet deutlich schnellere Antwortzeiten.
| Testtyp | MQ | Vorgangsanzahl | Kosten pro Vorgang | Speicherkosten | CPU-Gesamtzeit | Speicherkosten |
|---|---|---|---|---|---|---|
| 5MB*100 Pub/Sub | NATS | 50 | 1.650328186 s/op | 4.29 GB | 85.58 | 25G |
| 5MB*100 Pub/Sub | RocksMQ | 50 | 2.475595131 s/op | 1.18 GB | 81.42 | 19G |
| 1MB*500 Pub/Sub | NATS | 50 | 2.248722593 s/op | 2.60 GB | 96.50 | 25G |
| 1MB*500 Pub/Sub | RocksMQ | 50 | 2.554614279 s/op | 614.9 MB | 80.19 | 19G |
| 64KB*10000 Pub/Sub | NATS | 50 | 2.133345262 s/op | 3.29 GB | 97.59 | 31G |
| 64KB*10000 Pub/Sub | RocksMQ | 50 | 3.253778195 s/op | 331.2 MB | 134.6 | 24G |
| 1KB*50000 Pub/Sub | NATS | 50 | 2.629391004 s/op | 635.1 MB | 179.67 | 2.6G |
| 1KB*50000 Pub/Sub | RocksMQ | 50 | 0.897638581 s/op | 232.3 MB | 60.42 | 521M |
Tabelle 1: Ergebnisse der Pub/Sub-Performance-Tests
Milvus-Integrationstests
Datengröße: 100M
Ergebnis: In umfangreichen Tests mit einem Datensatz von 100 Millionen Vektoren zeigte NATS eine geringere Latenz bei Vektorsuche und Abfragen.
| Metriken | RocksMQ (ms) | NATS (ms) |
|---|---|---|
| Durchschnittliche Vektorsuchlatenz | 23.55 | 20.17 |
| Vektorsuchanfragen pro Sekunde (RPS) | 2.95 | 3.07 |
| Durchschnittliche Abfragelatenz | 7.2 | 6.74 |
| Abfrageanfragen pro Sekunde (RPS) | 1.47 | 1.54 |
Tabelle 2: Ergebnisse der Milvus-Integrationstests mit 100m-Datensatz
Datensatz: <100M
Ergebnis: Für Datensätze kleiner als 100M zeigen NATS und RocksMQ eine ähnliche Leistung.
Fazit: Milvus mit NATS-Messaging stärken
Die Integration von NATS in Milvus markiert einen bedeutenden Fortschritt in der Datenverarbeitung. Ob bei Echtzeitanalysen, Machine-Learning-Anwendungen oder datenintensiven Projekten – NATS verleiht Ihren Projekten Effizienz, Zuverlässigkeit und Geschwindigkeit. Mit der Weiterentwicklung der Datenlandschaft stellt ein robustes Messaging-System wie NATS in Milvus eine nahtlose, zuverlässige und leistungsstarke Datenkommunikation sicher.
Weiterlesen

Why We Built Vector Lakebase: Rethinking Unstructured Data Architecture for AI
Vector Lakebase: a unified, lake-native data foundation for AI workloads — and an answer to what happens after vector databases succeed.

Will Amazon S3 Vectors Kill Vector Databases—or Save Them?
AWS S3 Vectors aims for 90% cost savings for vector storage. But will it kill vectordbs like Milvus? A deep dive into costs, limits, and the future of tiered storage.

Zilliz Named "Highest Performer" and "Easiest to Use" in G2's Summer 2025 Grid® Report for Vector Databases
Zilliz shines in G2's Summer 2025 Grid® Report as both "Highest Performer" and "Easiest to Use," solving the performance-usability dilemma.



