Mit Elasticsearch können Sie Daten schnell und flexibel indexieren. Testen Sie es kostenlos in der Cloud oder führen Sie es lokal aus, um zu erfahren, wie einfach die Indizierung sein kann.
Die Datenaufnahme in Elasticsearch mit Apache Camel ist ein Prozess, der die Robustheit einer Suchmaschine mit der Flexibilität eines Integrationsframeworks verbindet. In diesem Artikel werden wir untersuchen, wie Apache Camel die Datenaufnahme in Elasticsearch vereinfachen und optimieren kann. Um diese Funktionalität zu veranschaulichen, werden wir eine einführende Anwendung implementieren, die Schritt für Schritt demonstriert, wie man Apache Camel konfiguriert und verwendet, um Daten an Elasticsearch zu senden.
Was ist Apache Camel?
Apache Camel ist ein Open-Source-Integrationsframework, das die Verbindung verschiedener Systeme vereinfacht und es Entwicklern ermöglicht, sich auf die Geschäftslogik zu konzentrieren, ohne sich um die Komplexität der Systemkommunikation kümmern zu müssen. Das zentrale Konzept in Camel sind „Routen“, die den Weg definieren, den eine Nachricht vom Ursprung zum Ziel zurücklegt, einschließlich potenzieller Zwischenschritte wie Transformationen, Validierungen und Filterungen.
Apache Camel-Architektur

Camel verwendet „Komponenten“, um Verbindungen zu verschiedenen Systemen und Protokollen wie Datenbanken und Messaging-Diensten herzustellen, sowie „Endpunkte“, um die Ein- und Austrittspunkte von Nachrichten darzustellen. Diese Konzepte bieten ein modulares und flexibles Design, wodurch die Konfiguration und Verwaltung komplexer Integrationen effizienter und skalierbarer wird.
Verwendung von Elasticsearch und Apache Camel
Wir zeigen Ihnen, wie Sie eine einfache Java-Anwendung konfigurieren, die Apache Camel verwendet, um Daten in einen Elasticsearch-Cluster einzuspeisen. Die Prozesse zum Erstellen, Aktualisieren und Löschen von Daten in Elasticsearch mithilfe von in Apache Camel definierten Routen werden ebenfalls behandelt.
1. Hinzufügen von Abhängigkeiten
Der erste Schritt bei der Konfiguration dieser Integration besteht darin, die notwendigen Abhängigkeiten zur pom.xml -Datei Ihres Projekts hinzuzufügen. Dies umfasst die Apache Camel- und Elasticsearch-Bibliotheken. Wir werden die neue Java API Client-Bibliothek verwenden, daher müssen wir die Komponente camel-elasticsearch importieren, und zwar in der Version, die mit der der Bibliothek camel-core übereinstimmen muss.
Wenn Sie den Java Low Level Rest Client verwenden möchten, müssen Sie die Elasticsearch Low Level Rest Client-Komponente verwenden.
2. Konfigurieren und Ausführen des Camel-Kontexts
Die Konfiguration beginnt mit der Erstellung eines neuen Camel-Kontexts mithilfe der Klasse DefaultCamelContext , die als Basis für die Definition und Ausführung von Routen dient. Als Nächstes konfigurieren wir die Elasticsearch-Komponente, die es Apache Camel ermöglicht, mit einem Elasticsearch-Cluster zu interagieren. Die ESlasticsearchComponent -Instanz ist so konfiguriert, dass sie eine Verbindung zur Adresse localhost:9200 herstellt. Dies ist die Standardadresse für einen lokalen Elasticsearch-Cluster. Für eine Umgebungskonfiguration, die eine Authentifizierung erfordert, sollten Sie die Dokumentation zur Konfiguration der Komponente und zur Aktivierung der Basisauthentifizierung lesen, die unter dem Titel „Komponente konfigurieren und Basisauthentifizierung aktivieren“ bezeichnet wird.
Diese Komponente wird dann dem Camel-Kontext hinzugefügt, wodurch die definierten Routen diese Komponente nutzen können, um Operationen in Elasticsearch durchzuführen.
Anschließend werden die Routen dem Kontext hinzugefügt. Wir werden Routen für die Massenindizierung, Aktualisierung und Löschung von Dokumenten erstellen.
3. Konfiguration von Camel-Routen
Datenindizierung
Die erste Route, die wir konfigurieren werden, dient der Datenindizierung. Wir werden eine JSON-Datei verwenden, die einen Filmkatalog enthält. Die Route wird so konfiguriert, dass die unter src/main/resources/movies.json befindliche Datei gelesen, der JSON-Inhalt in Java-Objekte deserialisiert und anschließend eine Aggregationsstrategie angewendet wird, um mehrere Nachrichten zu einer einzigen zusammenzufassen, wodurch Batch-Operationen in Elasticsearch ermöglicht werden. Es wurde eine Größe von 500 Elementen pro Nachricht konfiguriert, d. h., der Massenindex indexiert jeweils 500 Filme.
Route Elasticsearch Operation Bulk
Der Dokumentenstapel wird an den Bulk-Operations-Endpunkt von Elasticsearch gesendet. Dieser Ansatz gewährleistet Effizienz und Geschwindigkeit bei der Verarbeitung großer Datenmengen.
Datenaktualisierung
Der nächste Schritt besteht darin, die Dokumente zu aktualisieren. Im vorherigen Schritt haben wir einige Filme indexiert. Nun erstellen wir neue Routen, um anhand des Referenzcodes nach einem Dokument zu suchen und anschließend das Bewertungsfeld zu aktualisieren.
Wir richten einen Camel-Kontext (DefaultCamelContext) ein, in dem eine Elasticsearch-Komponente registriert und eine benutzerdefinierte Route IngestionRoute hinzugefügt wird. Der Vorgang beginnt mit dem Senden des Dokumentcodes über die ProducerTemplate, wodurch die Route vom Endpunkt direct:update-ingestion gestartet wird.
Als nächstes haben wir die IngestionRoute, die der Eingabeendpunkt für diesen Datenfluss ist. Die Route führt mehrere nacheinander ausgeführte Operationen durch. Zunächst wird in Elasticsearch eine Suche durchgeführt, um das Dokument anhand des Codes (direct:search-by-id) zu finden. Der SearchByCodeProcessor stellt die Abfrage auf Basis des Codes zusammen. Anschließend wird das abgerufene Dokument vom UpdateRatingProcessor verarbeitet, der das Ergebnis in Movie-Objekte umwandelt, die Filmbewertung auf einen bestimmten Wert aktualisiert und das aktualisierte Dokument für die Rücksendung an Elasticsearch zur Aktualisierung vorbereitet.
Der SearchByCodeProcessor -Prozessor wurde nur für die Ausführung der Suchanfrage konfiguriert:
Der UpdateRatingProcessor -Prozessor ist für die Aktualisierung des Bewertungsfelds zuständig.
Datenlöschung
Abschließend wird der Weg zum Löschen von Dokumenten konfiguriert. Hier löschen wir ein Dokument anhand seiner ID. Um in Elasticsearch ein Dokument zu löschen, benötigen wir die Dokumentkennung, den Index, in dem das Dokument gespeichert ist, und müssen eine Löschanforderung ausführen. In Apache Camel führen wir diese Operation durch, indem wir eine neue Route erstellen, wie unten gezeigt.
Die Route beginnt am Endpunkt direct:op-delete, der als Einstiegspunkt dient. Wenn ein Dokument gelöscht werden muss, wird seine Kennung (_id) im Nachrichtentext empfangen. Die Route setzt dann den IndexId-Header mit dem Wert dieser Kennung mithilfe von einfachem("${body}"), wodurch die _id aus dem Nachrichtentext extrahiert wird.
Schließlich wird die Nachricht an den durch URI_DELETE_OPERATION angegebenen Endpunkt weitergeleitet, der eine Verbindung zu Elasticsearch herstellt, um die Dokumentenlöschung im entsprechenden Index durchzuführen.
Nachdem wir die Route erstellt haben, können wir einen Camel-Kontext (DefaultCamelContext) erstellen, der so konfiguriert ist, dass er die Elasticsearch-Komponente enthält.
Als nächstes wird die durch die Klasse OperationDeleteRoute definierte Löschroute zum Kontext hinzugefügt. Nachdem der Kontext initialisiert wurde, wird ein ProducerTemplate verwendet, um die Kennung des zu löschenden Dokuments an den direct:op-delete Endpunkt zu übergeben, wodurch die Löschroute ausgelöst wird.
Fazit
Die Integration zwischen Apache Camel und Elasticsearch ermöglicht eine robuste und effiziente Datenaufnahme, indem die Flexibilität von Camel genutzt wird, um Routen zu definieren, die verschiedene Datenmanipulationsszenarien wie Indizierung, Aktualisierung und Löschung bewältigen können. Mit diesem Setup können Sie komplexe Prozesse skalierbar orchestrieren und automatisieren und so sicherstellen, dass Ihre Daten in Elasticsearch effizient verwaltet werden. Dieses Beispiel demonstrierte, wie diese Werkzeuge zusammen verwendet werden können, um eine effiziente und anpassungsfähige Lösung für die Datenerfassung zu schaffen.
Referenzen
Häufige Fragen
Was ist Apache Camel?
Apache Camel ist ein Open-Source-Integrationsframework, das die Verbindung verschiedener Systeme vereinfacht und es Entwicklern ermöglicht, sich auf die Geschäftslogik zu konzentrieren, ohne sich um die Komplexität der Systemkommunikation kümmern zu müssen.




