Wird geladen...

Wir haben festgestellt, dass Ihre Browsersprache Chinesisch ist. Möchten Sie unsere chinesische Website besuchen? [ Schließen ]
Von: Emma

Das Streaming von Daten von Kafka nach PostgreSQL ist eine häufige Anforderung moderner ereignisgesteuerter Architekturen. Kafka ermöglicht eine skalierbare Echtzeit‑Ereignisverarbeitung, während PostgreSQL einen zuverlässigen relationalen Speicher für Anwendungen, Analysen und Datensynchronisation bietet.

Dieser Leitfaden beschreibt den Datenfluss von Kafka nach PostgreSQL, gängige Integrationsmethoden und wichtige Praktiken zum Aufbau zuverlässiger Echtzeit‑Datenpipelines.

Was „Streaming von Kafka nach PostgreSQL“ tatsächlich bedeutet

In einer Echtzeit‑Datenpipeline fungiert Apache Kafka als Ereignis‑Streaming‑Plattform, PostgreSQL als relationale Datenbank zum Speichern und Abfragen verarbeiteter Daten.

Beim Streaming von Daten von Kafka nach PostgreSQL werden fortlaufend Ereignisse aus Kafka‑Topics konsumiert und mit geringer Latenz in PostgreSQL‑Tabellen geschrieben.

Diese Integration wird üblicherweise für folgende Anwendungsfälle eingesetzt:

  • Echtzeit‑Analysen: Einspeisen von Transaktionsereignissen in PostgreSQL zur Unterstützung von Live‑Dashboards und Berichterstellung.
  • Materialisierte Sichten: Aktualisierung vorberechneter Metriken und Aggregationen bei Eintreffen neuer Ereignisse.
  • Ereignisgesteuerte Anwendungen: Aktualisierung von Anwendungsdatenbanken auf Basis von Ereignissen vorgelagerter Dienste.
  • Datenintegrations‑Pipelines: Umwandlung von Ereignis‑Streams aus unterschiedlichen Systemen in abfragbare relationale Daten.

Im Kafka‑Ökosystem verschiebt ein Source‑Connector Daten nach Kafka, ein Sink‑Connector hingegen leitet Daten von Kafka an externe Systeme wie PostgreSQL weiter.

Das Streaming von Daten aus Kafka unterscheidet sich von CDC und Datenbank‑Replikation, die häufig für Szenarien der Datenbanksynchronisation und Hochverfügbarkeit verwendet werden.

Integrationsmuster Kafka→PG‑Streaming CDC Datenbank‑Replikation
Zweck

Schreiben von Kafka‑Ereignisdaten in

PostgreSQL‑Tabellen.

Streamen von Datenbankänderungen nach Kafka

oder andere Systeme.

Bereitstellen von Datenbankkopien

über verschiedene Umgebungen hinweg.

Dateneinheit

Ereignis‑Nachrichten (JSON, Avro,

Protobuf).

Ereignisse vom Typ Einfügen/Aktualisieren/Löschen. Transaktionen oder Protokolldatensätze.
Haupt‑Anwendungsfall

Echtzeit‑Analysen und

Datenintegration.

Echtzeit‑Synchronisation, ereignisgesteuerte Architekturen. Notfallwiederherstellung, Hochverfügbarkeit, Leseskalierung.

Wie Daten von Kafka‑Topics zu PostgreSQL‑Tabellen gelangen

Eine zuverlässige Kafka‑zu‑PostgreSQL‑Pipeline besteht aus mehreren Komponenten, die Daten aus Kafka‑Topics in relationale Tabellen überführen. Das Verständnis dieses Datenflusses hilft, die Funktionsweise verschiedener Integrationsmethoden wie Kafka Connect oder benutzerdefinierte Consumer nachzuvollziehen.

how data moves from kafka topics to postgresql tables

Die Rolle von Kafka‑Producern und ‑Topics

Ein Kafka‑Producer ist eine Anwendung, die Datensätze in Kafka‑Topics veröffentlicht. Diese Datensätze liegen als Schlüssel‑Wert‑Nachrichten vor und werden üblicherweise in Formaten wie JSON, Apache Avro oder Protocol Buffers serialisiert.

Kafka‑Topics sind in Partitionen unterteilt, um Skalierbarkeit und parallele Verarbeitung zu ermöglichen. Wenn ein Producer eine Nachricht sendet, weist Kafka diese anhand des Nachrichtenschlüssels einer Partition zu. Nachrichten mit demselben Schlüssel werden in dieselbe Partition geschrieben, wodurch ihre Verarbeitungsreihenfolge erhalten bleibt.

Wie Kafka‑Consumer Daten in PostgreSQL schreiben

Auf der Empfängerseite liest ein Consumer oder Integrations‑Connector Nachrichten aus Kafka‑Topics und schreibt diese in PostgreSQL‑Tabellen. Der typische Arbeitsablauf umfasst folgende Schritte:

  1. Lesen neuer Datensätze aus Kafka‑Topics.
  2. Deserialisieren von Nachrichten in strukturierte Datenformate.
  3. Zuordnen von Nachrichtenfeldern zu Spalten der PostgreSQL‑Tabelle.
  4. Schreiben der Daten mittels SQL‑Operationen wie INSERT oder UPSERT.

Da Schreibvorgänge in PostgreSQL in der Regel eine höhere Latenz aufweisen als Lesevorgänge aus Kafka, ist das Batching mehrerer Datensätze vor dem Schreiben in die Datenbank wichtig, um den Durchsatz aufrechtzuerhalten und den Overhead zu senken.

3 Methoden zum Streaming von Daten von Kafka nach PostgreSQL

Es gibt drei gängige Ansätze für das Streaming von Daten von Kafka nach PostgreSQL. Die richtige Wahl hängt von Faktoren wie Datenvolumen, Transformationsanforderungen, Latenzerwartungen und betrieblicher Komplexität ab.

Methode 1: Kafka Connect mit JDBC‑Sink‑Connector

Kafka Connect ist ein Open‑Source‑Framework innerhalb des Apache‑Kafka‑Ökosystems, das den Datenaustausch zwischen Kafka und externen Systemen ermöglicht.

Der JDBC‑Sink‑Connector ist ein konfigurationsbasierter Connector, der Datensätze aus Kafka‑Topics konsumiert und diese ohne benutzerdefinierten Consumer‑Code in PostgreSQL‑Tabellen schreibt.

method 1 kafka connect with jdbc sink connector

Funktionsweise des JDBC‑Sink‑Connectors

Der JDBC‑Sink‑Connector läuft innerhalb eines Kafka‑Connect‑Clusters und konsumiert fortlaufend Datensätze aus den konfigurierten Kafka‑Topics. Er wandelt Kafka‑Datensätze anhand der Connector‑Konfiguration in Datenbankoperationen um und schreibt die Daten anschließend per JDBC in PostgreSQL.

Der Connector kann über Kafka‑Converter Daten verarbeiten, die in Formaten wie JSON, Avro oder anderen unterstützten Formaten serialisiert sind. Bei schemabasierten Formaten wie Avro wird häufig die Integration mit einem Schema‑Registry zur Verwaltung der Schema‑Kompatibilität verwendet.

Beispiel‑Konfiguration für den Connector

Das folgende Beispiel zeigt eine typische Konfiguration des JDBC‑Sink‑Connectors zum Schreiben von Bestelldaten aus einem Kafka‑Topic nach PostgreSQL:

json
{
  "name": "postgres-order-sink",
  "config": {
    "connector.class": "io.confluent.connect.jdbc.JdbcSinkConnector",
    "tasks.max": "2",
    "topics": "customer_orders",
    "connection.url": "jdbc:postgresql://postgres-db.internal:5432/ecommerce",
    "connection.user": "app_user",
    "connection.password": "secure_db_password_123",
    "insert.mode": "upsert",
    "pk.mode": "record_key",
    "pk.fields": "order_id",
    "auto.create": "true",
    "auto.evolve": "true"
  }
}
  • connection.url: Gibt die JDBC‑Verbindungszeichenfolge zur PostgreSQL‑Datenbank an.
  • insert.mode: Legt fest, wie Datensätze geschrieben werden. Bei „upsert“ können vorhandene Zeilen mit passendem Primärschlüssel aktualisiert werden, anstatt Fehler durch doppelte Schlüssel auszulösen.
  • pk.mode: Bestimmt, wie der Connector den Primärschlüssel ermittelt. Bei „record_key“ wird der Kafka‑Nachrichtenschlüssel als Primärschlüssel der Datenbank verwendet.
  • auto.create und auto.evolve: Erlauben dem Connector, Tabellen oder Spalten bei Unterstützung automatisch anhand der Datensatz‑Schemas anzulegen.
Hinweis: Obwohl auto.evolve Entwicklung und Test vereinfacht, sollte es in Produktivumgebungen vorsichtig eingesetzt werden. Automatische Schema‑Änderungen können unerwartete Modifikationen der Datenbank verursachen, wenn sich vorgelagerte Datenstrukturen ohne entsprechende Prüfung ändern.

Einsatzbereich

Kafka Connect mit JDBC‑Sink‑Connector eignet sich für einfache Datenaufnahme‑Pipelines mit relativ stabilen Schemas. Es ist gut geeignet für Teams, die einen zuverlässigen Datenfluss von Kafka nach PostgreSQL benötigen, ohne eigene Consumer erstellen und warten zu wollen.

Methode 2: Benutzerdefinierter Consumer (Python/Go)

Wenn Sie die vollständige Kontrolle über Datentransformationen, Filterung, Routing oder anwendungsspezifische Logik benötigen, ist ein benutzerdefinierter Consumer ein flexibler Ansatz. Statt eines vorgefertigten Connectors erstellen Sie eine leichtgewichtige Anwendung in einer Programmiersprache wie Python oder Go, um Kafka‑Nachrichten zu konsumieren und Daten nach PostgreSQL zu schreiben.

(Kafka‑Topic) —> [Benutzerdefinierte Consumer‑Anwendung (Python/Go)] —> [PostgreSQL‑Datenbank]

Konsumieren und Schreiben von Daten mit Python

Ein benutzerdefinierter Consumer stellt eine direkte Verbindung zum Kafka‑Cluster her, fragt neue Datensätze ab, verarbeitet Nachrichten auf Anwendungsebene und schreibt die Ergebnisse in PostgreSQL.

Das folgende Beispiel nutzt den Python‑Client confluent‑kafka zum Konsumieren von JSON‑Nachrichten sowie psycopg2 zum Schreiben von Datensätzen per UPSERT‑Operation nach PostgreSQL:

python
import json
import psycopg2
from confluent_kafka import Consumer, KafkaError

# Kafka‑Consumer‑Konfiguration
kafka_config = {
    'bootstrap.servers': 'kafka.internal:9092',
    'group.id': 'postgres-ingest-group',
    'auto.offset.reset': 'earliest',
    'enable.auto.commit': False
}

# PostgreSQL‑Datenbankverbindung
db_conn = psycopg2.connect("host=postgres-db.internal dbname=ecommerce user=app_user password=secure_password")
db_cursor = db_conn.cursor()

consumer = Consumer(kafka_config)
consumer.subscribe(['customer_orders'])

try:
    while True:
        msg = consumer.poll(timeout=1.0)

        if msg is None:
            continue

        if msg.error():
            if msg.error().code() != KafkaError._PARTITION_EOF:
                print(f"Consumer‑Fehler: {msg.error()}")
            continue

        payload = json.loads(msg.value().decode('utf‑8'))

        insert_query = """
            INSERT INTO customer_orders (order_id, customer_id, total_amount)
            VALUES (%s, %s, %s)
            ON CONFLICT (order_id) DO UPDATE
            SET total_amount = EXCLUDED.total_amount;
        """

        db_cursor.execute(
            insert_query,
            (
                payload['order_id'],
                payload['customer_id'],
                payload['total_amount']
            )
        )

        db_conn.commit()

        # Kafka‑Offset erst nach erfolgreichem Datenbank‑Schreiben bestätigen
        consumer.commit(msg, asynchronous=False)

except KeyboardInterrupt:
    pass

finally:
    db_cursor.close()
    db_conn.close()
    consumer.close()

Einsatzbereich

Der Ansatz mit benutzerdefiniertem Consumer eignet sich gut für Pipelines, die vor dem Schreiben nach PostgreSQL individuelle Transformationen, Datenanreicherung, Filterung oder bedingtes Routing erfordern.

Er bietet maximale Flexibilität, erfordert aber, dass Teams Anwendungscode, Fehlerbehandlung, Skalierung und betriebliche Überwachung verwalten.

Methode 3: Stream‑Processing‑Frameworks (Flink/Spark)

Für großskalige Pipelines mit komplexer Ereignisverarbeitung, fensterbasierten Berechnungen, zustandsbehafteten Operationen oder Stream‑Joins reichen einfache Connectoren und benutzerdefinierte Consumer unter Umständen nicht aus.

In diesen Szenarien werden häufig Stream‑Processing‑Frameworks wie Apache Flink und Apache Spark Structured Streaming eingesetzt.

(Kafka‑Topic) —> [Flink / Spark‑Verarbeitungs‑Engine] —> [PostgreSQL‑Datenbank]

Einsatz von Flink mit JDBC‑Sink

Apache Flink ist für die Niedrig‑Latenz‑Stream‑Verarbeitung ausgelegt und unterstützt zustandsbehaftete Berechnungen auf kontinuierlichen Daten‑Streams. Mit der Flink‑DataStream‑API können Teams Kafka‑Ereignisse filtern, transformieren und anreichern, bevor die verarbeiteten Ergebnisse in PostgreSQL geschrieben werden.

Das folgende Java‑Beispiel zeigt, wie der Flink‑JdbcSink verarbeitete Stream‑Daten in eine PostgreSQL‑Tabelle schreibt:

java
import org.apache.flink.connector.jdbc.JdbcConnectionOptions;
import org.apache.flink.connector.jdbc.JdbcExecutionOptions;
import org.apache.flink.connector.jdbc.JdbcSink;
import org.apache.flink.streaming.api.datastream.DataStream;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;

public class FlinkPostgresStreamingJob {
    public static void main(String[] args) throws Exception {
        final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();

        // Stream aus Kafka konsumieren und verarbeiten
        DataStream<OrderEvent> processedStream = env.fromSource(...)
            .filter(event -> event.getAmount() > 10.0);

        // Verarbeitete Daten nach PostgreSQL schreiben
        processedStream.addSink(JdbcSink.sink(
            "INSERT INTO processed_orders (order_id, amount) VALUES (?, ?) " +
            "ON CONFLICT (order_id) DO UPDATE SET amount = EXCLUDED.amount",
            (statement, order) -> {
                statement.setString(1, order.getOrderId());
                statement.setDouble(2, order.getAmount());
            },
            JdbcExecutionOptions.builder()
                .withBatchSize(1000)
                .withBatchIntervalMs(200)
                .withMaxRetries(5)
                .build(),
            new JdbcConnectionOptions.JdbcConnectionOptionsBuilder()
                .withUrl("jdbc:postgresql://postgres-db.internal:5432/ecommerce")
                .withDriverName("org.postgresql.Driver")
                .withUsername("app_user")
                .withPassword("secure_password")
                .build()
        ));

        env.execute("Flink-to-PostgreSQL-Sink");
    }
}

Wann Spark Structured Streaming besser geeignet ist

Apache Spark Structured Streaming nutzt standardmäßig ein Micro‑Batch‑Ausführungsmodell und eignet sich daher gut für Teams, die bereits mit dem Spark‑Ökosystem arbeiten.

Spark ist die bessere Wahl, wenn:

  • Ihr Team bereits Apache Spark‑ oder Databricks‑Workloads betreibt.
  • Sie Pipelines bevorzugt mit Python (PySpark) und DataFrame‑APIs erstellen möchten.
  • Ihr Anwendungsfall Micro‑Batch‑Latenz toleriert und keine kontinuierliche Niedrig‑Latenz‑Verarbeitung erfordert.

Einsatzbereich

Stream‑Processing‑Frameworks eignen sich für großskalige Pipelines mit erweiterten Transformations‑Anforderungen, zustandsbehafteter Verarbeitung, Datenanreicherung oder der Kombination mehrerer Streaming‑Quellen vor dem Laden der Ergebnisse nach PostgreSQL.

Best‑Practices für zuverlässiges Kafka‑zu‑PostgreSQL‑Streaming

Der Betrieb einer Kafka‑zu‑PostgreSQL‑Pipeline im Produktivbetrieb erfordert sorgfältige Berücksichtigung von Zuverlässigkeit, Leistung und Datenkonsistenz. Geeignete Überwachung, Fehlerbehandlung und Wiederherstellungsstrategien sorgen für eine stabile Pipeline bei steigendem Datenvolumen und wachsender Verarbeitungskomplexität.

Überwachung des Kafka‑Consumer‑Lag

Der Consumer‑Lag beschreibt die Differenz zwischen dem neuesten verfügbaren Offset in einer Kafka‑Partition und dem Offset, der von einer Consumer‑Gruppe verarbeitet wurde. Wenn der Lag stetig ansteigt, kann der Consumer nicht mit eingehenden Ereignissen Schritt halten, was zu Verzögerungen beim Eintreffen der Daten in PostgreSQL führt.

Zur Reduzierung und Steuerung des Consumer‑Lags:

  • Skalieren von Consumer‑Gruppen: Hinzufügen von Consumer‑Instanzen entsprechend dem Workload‑Bedarf und der Anzahl der Kafka‑Partitionen. Jede Partition kann innerhalb einer Consumer‑Gruppe nur von jeweils einem Consumer aktiv verarbeitet werden.
  • Optimierung der Batch‑Verarbeitung: Anpassen der Consumer‑Abruf‑Einstellungen und Datenbank‑Schreib‑Batches, um Durchsatz und Ressourcennutzung auszugleichen. Kleine Batches erhöhen den Overhead der Datenbank, übermäßig große Batches steigern Speicherbedarf und Verarbeitungslatenz.
  • Überwachung der Pipeline‑Leistung: Einsatz von Überwachungstools wie Prometheus, Grafana oder Burrow zur Verfolgung des Consumer‑Lags und Einrichten von Warnungen bei anomalen Verzögerungen.

Gestaltung von Fehlerbehandlung und Wiederholungsmechanismen

Streaming‑Pipelines müssen unerwartete Ausfälle verarbeiten, darunter fehlerhafte Nachrichten, Schema‑Probleme und vorübergehende Probleme bei der Datenbankverbindung. Ohne geeignete Fehlerbehandlung kann ein einzelner fehlerhafter Datensatz die Nachrichtenverarbeitung unterbrechen.

Empfohlene Vorgehensweisen:

  • Einsatz einer Dead‑Letter‑Queue (DLQ): Umleiten fehlgeschlagener Nachrichten in ein separates Kafka‑Topic zur späteren Untersuchung und Nachbearbeitung. Dadurch werden ungültige Datensätze daran gehindert, die Haupt‑Pipeline zu blockieren.
  • Nutzen von Wiederholungsstrategien: Anwendung von Wiederholungsmechanismen mit exponentiellem Backoff bei vorübergehenden Ausfällen wie Netzwerkunterbrechungen oder temporärer Nichtverfügbarkeit der Datenbank.
  • Trennung behebbarer und nicht behebbarer Fehler: Behandlung vorübergehender Probleme abweichend von dauerhaften Ausfällen wie ungültigen Datenformaten oder Schema‑Abweichungen. Protokollierung und Nachverfolgung fehlgeschlagener Datensätze vereinfacht die Fehlersuche.

Planung von Datenwiederherstellung und Wiedergabe

Die Nachrichten‑Aufbewahrungsfähigkeit von Kafka erlaubt Teams die Wiedergabe historischer Ereignisse bei der Wiederherstellung nach Anwendungsfehlern, Verarbeitungsausfällen oder Problemen bei der Datensynchronisation.

Für eine sichere Wiederherstellung und Wiedergabe:

  • Entwurf von idempotenten Schreibvorgängen: Verwenden von Datenbank‑Operationen, die dasselbe Ereignis mehrmals sicher verarbeiten können. PostgreSQL‑UPSERT‑Operationen wie ON CONFLICT DO UPDATE helfen, Duplikate bei Wiedergabe‑Szenarien zu vermeiden.
  • Sorgfältige Verwaltung von Offsets: Zurücksetzen von Offsets der Consumer‑Gruppe zur Wiedergabe von Daten ab einem bestimmten Punkt bei Bedarf. Vor der Wiedergabe von Nachrichten sind die Auswirkungen auf vorhandene PostgreSQL‑Daten zu prüfen und sicherzustellen, dass Schreiboperationen wiederholte Ereignisse verarbeiten können.

Auswahl des passenden Ansatzes für Ihre Pipeline

Jede der beschriebenen Methoden löst ein anderes Problem. Kafka Connect eignet sich bei stabilen Schemas, wenn Daten mit minimalem Code fließen sollen. Ein benutzerdefinierter Consumer ist sinnvoll, wenn Sie eine feingranulare Kontrolle über die Nachrichtenverarbeitung benötigen. Flink oder Spark rechtfertigen ihre Komplexität, wenn die Pipeline echte Transformationen, Joins oder Aggregationen erfordert.

Alle drei Methoden setzen voraus, dass Kafka bereits saubere und zeitgerechte Ereignisdaten erhält. Die zuverlässige Übertragung dieser Daten aus einer produktiven Quelldatenbank ohne Lag, Schema‑Abweichungen oder stille Abweichungen ist ein separates Problem. Das i2Stream von Info2soft ist genau für diese vorgelagerte Phase entwickelt.

i2Stream verfügt über mehrere Funktionen, die für Kafka‑nahe Pipelines relevant sind:

  • Protokollbasierte Echtzeit‑Erfassung: i2Stream liest direkt aus Datenbankprotokollen statt Tabellen abzufragen und erreicht dadurch Latenzen im Millisekunden‑Bereich auch in Umgebungen mit hoher Parallelität. Dadurch bleiben die an nachgelagerte Systeme gelieferten Daten aktuell und hinken nicht dem Produktivbetrieb hinterher.
  • Integrierte DDL‑/DML‑Synchronisation: Schema‑Änderungen werden zusammen mit Datenänderungen repliziert, sodass eine Tabellenänderung auf Quellseite nicht stillschweigend einen Connector oder Consumer mit alter Struktur außer Betrieb setzt.
  • Integrierte Datenintegritätsprüfungen: MD5‑Prüfsummen‑Vergleiche, visuelle Drift‑Analyse und Ein‑Klick‑Reparatur erkennen Abweichungen zwischen Quelle und Ziel automatisch ohne benutzerdefinierte Validierungsskripte.
  • Agent‑freie Bereitstellung: Es ist keine Software auf der produktiven Quelldatenbank zu installieren, die Replikation läuft ohne Auswirkungen auf die Leistung des Quellsystems.
  • Breite Datenbank‑ und Plattformunterstützung: i2Stream unterstützt mehr als 40 Datenbank‑ und Big‑Data‑Umgebungen, was nützlich ist, wenn eine Pipeline später Daten aus mehreren Quellsystemen beziehen soll.

Für Teams, deren eigentlicher Engpass zuerst die zuverlässige, niedrig‑latenzige Datenextraktion aus einer produktiven Datenbank ist, übernimmt i2Stream diese Ebene, sodass nachgelagerte Kafka‑Connect‑, benutzerdefinierte‑Consumer‑ oder Flink‑/Spark‑Jobs mit vertrauenswürdigen Daten arbeiten können. Zusätzlich bietet Info2soft i2CDP für kontinuierlichen byte‑genauen Datenschutz, wenn der Fokus vom Streaming auf Notfallwiederherstellung wechselt.

Fazit

Das Streaming von Daten von Kafka nach PostgreSQL ist keine Ein‑für‑Alle‑Lösung. Kafka Connect liefert die schnellste Lösung bei stabilen Schemas, ein benutzerdefinierter Consumer gibt Kontrolle bei spezifischer Logik, Flink oder Spark kommen zum Einsatz, wenn Transformation Teil der Aufgabe ist.

Unabhängig von der gewählten Methode ist die Pipeline nur so zuverlässig wie die Daten, die ursprünglich in Kafka eingespeist werden. An dieser Stelle kommen Tools wie i2Stream von Info2soft ins Spiel, die für korrekte und aktuelle Quelldaten sorgen, damit nachgelagerte Streaming‑Prozesse keine Probleme der Quelle erben.

Beginnen Sie mit der Methode, die den aktuellen Anforderungen Ihres Teams entspricht, und überprüfen Sie die Wahl bei wachsender Komplexität der Pipeline erneut.

Keine Kurzbiografie vorhanden

Weitere verwandte Artikel

Inhaltsverzeichnis:
Bleiben Sie über die neuesten Tipps informiert
Abonnieren Sie unseren Newsletter für aktuelle Einblicke, Neuigkeiten und exklusive Inhalte. Sie können sich jederzeit abmelden.
Abonnieren
Bereit, Ihre Unternehmensdatensicherheit zu verbessern?
Starten Sie eine 60-tägige Testversion oder sehen Sie sich eine Demo an, um zu erfahren, wie Info2soft Unternehmensdaten schützt.
Bitte füllen Sie das Formular aus und senden Sie es ab – unser Kundenservice wird sich in Kürze bei Ihnen melden.
Mit dem Absenden dieses Formulars bestätige ich, dass ich die Datenschutzerklärung.
{{ isSubmitting ? 'Wird gesendet...' : 'Absenden' }}