MongoDB behøver ingen introduktion. Siden sin debut i 2007 er dokumentdatabasen støt steget i popularitet og er nu den 5. rangerende database i verden ifølge DB Engines. Det følger nu kun Oracle, MySQL, SQL Server og PostgreSQL. Dette er så meget desto mere imponerende, når man tænker på, at de fire øverste er traditionelle relationelle databaser, der udkom i det forrige århundrede. MongoDB er nummer et blandt den nye generation af skalerbare, distribuerede "NoSQL"-databaser.
MongoDBs kviksølvvækst kan tilskrives et stærkt fokus på udvikleroplevelse. Selve produktet er enkelt, nemt at bruge og giver en glad vej fra prototype til produktion. Når de prøver MongoDB, har udviklere en tendens til at have succes med at flytte fungerende prototyper til fuld-blæste produktionsimplementeringer. Det er historien at huske.
Mens MongoDB forenklede databaseudvikling for millioner af udviklere verden over, er Redpanda på en lignende mission for at forenkle realtidsstreamingapplikationer. Fra starten blev Redpanda bygget med samme dedikation til enkelhed, brugervenlighed og vigtigst af alt, udviklerproduktivitet.
Anderledes, men ens
Mens MongoDB og Redpanda adresserer forskellige dele af tech-stakken, er det interessant at bemærke lighederne i, hvordan de leverer en fornøjelig udvikleroplevelse individuelt, og hvordan de komplementerer hinanden, når de kombineres. Altså:
- MongoDB sendes som en enkelt binær. Det gør Redpanda også. I modsætning til andre sammenlignelige streamingplatforme har Redpanda ingen afhængigheder af eksterne tjenester som Apache Zookeeper. Dette gør Redpanda lige så let at installere via pakkeadministratorer, som det er lokalt på en udviklers bærbare computer. Det leveres også som et Docker-image, så du kan oprette det via Docker Compose, integrere med CI/CD-pipelines eller implementere i Kubernetes med en simpel controller.
- Både Redpanda og MongoDB er distribuerede systemer. For at opnå skala og modstandsdygtighed installerer du blot den nøjagtige samme binære fil på flere servere og peger dem mod hinanden. Dette giver udviklere og arkitekter mulighed for at udsætte beslutninger om skalerbarhed og ydeevne tidligt i udviklingsprocessen. Den mentale model og kode for applikationen er den samme, uanset om den kører på en bærbar computer, en virtuel single-core maskine eller på flere kraftige produktionsservere.
- Både Redpanda og MongoDB leveres med fornuftige standardindstillinger. Dette minimerer antallet af knapper, som udviklere eller administratorer skal justere, uanset om de opretter et prototypemiljø (som med Docker Compose) eller klargør en produktionsklynge. Redpanda går endnu længere med evnen til at autotune mod underliggende hardware, så den kan maksimere de tilgængelige CPU-, hukommelses- og diskressourcer med minimal indsats.
- Den kognitive belastning for udviklere er ikke kun på skalerbarheden af bytes pr. sekund, men også på at skulle beslutte, hvilken form de skal give dine data, og hvilke typer de skal vælge. MongoDB giver udviklere fleksibiliteten til at udvikle skemaet over tid med en venlig JSON-lignende datamodel. Tilsvarende kræver begivenheder og beskeder sendt til Redpanda ikke et skema på forhånd. Der er dog mulighed for at bruge et skema, når det er nødvendigt, og at udvikle skemaet, så det matcher skiftende forretningsbehov.
Forbinder MongoDB til Redpanda
MongoDB integreres med Redpanda på to måder:som en sink, hvorved Redpanda-begivenheder forbruges og sendes til MongoDB for indsættelser eller opdateringer, eller som en CDC-kilde, hvor MongoDB eksternaliserer sin changelog til et Redpanda-emne for andre (inklusive andre MongoDB-forekomster) til forbruge. Integrationen sker via Kafka Connect. Da Redpanda er ledningskompatibel med Apache Kafka, fungerer de eksisterende Kafka-stik problemfrit. Denne evne til at udnytte det enorme Kafka-økosystem er endnu en måde, Redpanda gør udviklerens liv lettere på!
Vores venner hos MongoDB har sammensat en aktieticker-demo, der integrerer MongoDB og Redpanda via Kafka Connect. Demoen kræver Docker Compose og docker-compose.yml
fil ser sådan ud:
version: '3.7'
services:
redpanda:
command:
- redpanda
- start
- --smp
- '1'
- --reserve-memory
- 0M
- --overprovisioned
- --node-id
- '0'
- --kafka-addr
- PLAINTEXT://0.0.0.0:9092,OUTSIDE://0.0.0.0:9093
- --advertise-kafka-addr
- PLAINTEXT://redpanda:9092,OUTSIDE://localhost:9093
image: docker.vectorized.io/vectorized/redpanda:v21.9.3
ports:
- 9093:9093
connect:
image: confluentinc/cp-kafka-connect-base:latest
build:
context: .
dockerfile: Dockerfile-MongoConnect
depends_on:
- redpanda
ports:
- "8083:8083"
environment:
CONNECT_BOOTSTRAP_SERVERS: 'redpanda:9092'
CONNECT_REST_ADVERTISED_HOST_NAME: connect
CONNECT_REST_PORT: 8083
CONNECT_GROUP_ID: connect-cluster-group
CONNECT_CONFIG_STORAGE_TOPIC: docker-connect-configs
CONNECT_CONFIG_STORAGE_REPLICATION_FACTOR: 1
CONNECT_OFFSET_FLUSH_INTERVAL_MS: 10000
CONNECT_OFFSET_STORAGE_TOPIC: docker-connect-offsets
CONNECT_OFFSET_STORAGE_REPLICATION_FACTOR: 1
CONNECT_STATUS_STORAGE_TOPIC: docker-connect-status
CONNECT_STATUS_STORAGE_REPLICATION_FACTOR: 1
CONNECT_PLUGIN_PATH: "/usr/share/java,/usr/share/confluent-hub-components"
CONNECT_AUTO_CREATE_TOPICS_ENABLE: "true"
CONNECT_KEY_CONVERTER: "org.apache.kafka.connect.json.JsonConverter"
CONNECT_VALUE_CONVERTER: "org.apache.kafka.connect.json.JsonConverter"
mongo1:
image: "mongo:5.0.3"
volumes:
- /data/db
ports:
- "27017:27017"
restart: always
nodesvr:
image: node:16
build:
context: .
dockerfile: Dockerfile-Nodesvr
depends_on:
- redpanda
- mongo1
ports:
- "4000:4000"
Besøg det supplerende blogindlæg på MongoDB for en komplet tutorial og gennemgang. Vi byder alle fra MongoDB-fællesskabet velkommen til at prøve Redpanda og slutte sig til Redpanda-fællesskabet Slack, hvor du kan engagere dig med de ingeniører, der bygger Redpanda og former fremtiden for streaming i realtid!
Yderligere læsning
- Redpanda-dokumentation
- Benchmark for Redpanda versus Kafka
- Kom godt i gang med Redpanda