Kafka 不是一个传统的关系型数据库,而是一个分布式的流式事件流平台。它由Apache软件基金会开发,用于构建实时数据流应用程序和数据管道。以下是 Kafka 的一些主要特性和概念:
发布-订阅模型: Kafka采用了发布-订阅模型,其中数据生产者(发布者)将消息发送到主题(Topic),而数据消费者(订阅者)从主题中读取消息。
分布式系统: Kafka是一个分布式系统,可以横向扩展以处理大规模数据。它可以在多个节点上分布数据,提供高可用性和容错性。
主题(Topic): 主题是消息的逻辑容器,生产者将消息发布到主题,而消费者从主题中读取消息。主题可以分为多个分区,每个分区都是一个有序的消息队列。
分区(Partition): 主题可以分为多个分区,每个分区是一个独立的消息队列。分区允许水平扩展,提高并发性和吞吐量。
生产者(Producer): 生产者是将消息发布到 Kafka 主题的应用程序。生产者负责将消息发送到特定的主题和分区。
消费者(Consumer): 消费者是从 Kafka 主题中读取消息的应用程序。消费者可以以不同的方式订阅主题,例如从头开始消费或从特定的偏移量开始。
偏移量(Offset): 每个分区中的消息都有一个唯一的偏移量,表示消息在分区中的位置。消费者通过偏移量来跟踪已经消费的消息位置。
持久性: Kafka 提供持久性存储,确保消息在发布后可靠地保存,即使消费者尚未消费。
水平扩展: Kafka可以通过添加更多的代理节点来实现水平扩展,以处理更大的负载和提高性能。
流处理: Kafka支持实时流处理,允许开发者构建复杂的实时数据流应用程序。
总体而言,Kafka被设计用于高吞吐量、可扩展性和容错性,并广泛用于构建实时数据管道、事件驱动的微服务架构和大数据处理系统。
helm && kubernetes 部署
1 2 3 4 5 6 7
| helm install kafka-colony bitnami/kafka \ --set zookeeper.enabled=true --set "externalAccess.service.loadBalancerIPs[0]"="34.96.213.48" --set "externalAccess.service.loadBalancerIPs[1]"="34.149.99.8" --set "externalAccess.service.loadBalancerIPs[2]"="34.111.31.218" \ --set kraft.enabled=false \ --set replicaCount=3 --set externalAccess.enabled=true --set externalAccess.controller.forceExpose=true \ --set externalZookeeper.servers=zookeeper.stable-db.svc.cluster.local \ -n stable-db \ --version=22.1.2
|
docker-compose 部署
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
| version: "3" services: zookeeper: image: 'bitnami/zookeeper:latest' ports: - '2181:2181' environment: - ALLOW_ANONYMOUS_LOGIN=yes deploy: resources: reservations: cpus: "1" memory: 1G limits: cpus: "1" memory: 1G kafka: image: 'bitnami/kafka:3.3.2-debian-11-r183' ports: - "9092:9092" - "29092:29092" deploy: resources: reservations: cpus: "1" memory: 1G limits: cpus: "1" memory: 1G volumes: - /data/kafka:/bitnami/kafka - /log/kafka:/opt/bitnami/kafka/logs environment: - KAFKA_BROKER_ID=1 - KAFKA_CFG_LISTENERS=PLAINTEXT://:9092 - KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://localhost:9092 - KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=PLAINTEXT:PLAINTEXT - KAFKA_CFG_INTER_BROKER_LISTENER_NAME=PLAINTEXT - KAFKA_CFG_ZOOKEEPER_CONNECT=zookeeper:2181 - ADVERTISED_HOST=localhost healthcheck: test: ["CMD-SHELL", "kafka-topics.sh --bootstrap-server 127.0.0.1:9092 --list"] interval: 5s retries: 10 depends_on: - zookeeper
|