Аксесуари вагонів та їх класифікація для пасажирських і вантажних вагонів

pic

Реальний потік даних: від подій користувачів до Cassandra

Вступ

Сучасні веб-додатки генерують величезну кількість даних про взаємодії користувачів. Захоплення та аналіз цих даних в реальному часі може надати цінні інсайти щодо поведінки користувачів. У цьому проекті я зосередився на трансляції подій користувачів з веб-додатку магазину книг до Apache Cassandra для постійного зберігання. Потік даних використовує Apache Kafka для стрімінгу подій і Apache Spark для обробки в реальному часі.

Огляд проекту

Проект складається з наступних компонентів:

  1. Веб-додаток магазину книг: Веб-додаток на Flask, що симулює магазин книг. Він генерує події користувачів, такі як description_open, description_close і purchase.

pic

Веб-додаток магазину книг на Flask

  1. Apache Kafka: Розподілена платформа для стрімінгу, що виступає як брокер повідомлень для подій користувачів.

  2. Apache Spark: Двигун для обробки в реальному часі, що споживає події з Kafka та обробляє їх.

  3. Apache Cassandra: Високошвидкісна NoSQL база даних, що використовується для зберігання оброблених подій.

  4. Docker Compose: Всі компоненти контейнеризовані та оркестровані за допомогою Docker Compose для легкості налаштування та розгортання.

Архітектура

Ось загальний огляд архітектури:

  1. Взаємодія з користувачем: Користувачі взаємодіють з веб-додатком магазину книг, генеруючи події, такі як description_open, description_close і purchase.
  2. Стрімінг подій: Ці події публікуються в Kafka теми.
  3. Обробка в реальному часі: Apache Spark споживає події з Kafka, обробляє їх і записує результати в Cassandra.
  4. Зберігання даних: Оброблені події зберігаються в Cassandra для подальшого аналізу чи запитів.

Налаштування Docker Compose

Всі інструменти та сервіси контейнеризовані за допомогою Docker Compose. Ось файл docker-compose.yml:

version: '3.1'  

services:  
 zookeeper:  
 image: zookeeper  
 container_name: zookeeper  
 ports:  
 - "2181:2181"  
 environment:  
 ZOOKEEPER_CLIENT_PORT: 2181  

 kafka:  
 image: 'bitnami/kafka:latest'  
 container_name: kafka  
 ports:  
 - '9092:9092'  
 - '9093:9093'  
 environment:  
 - KAFKA_CFG_NODE_ID=0  
 - KAFKA_CFG_PROCESS_ROLES=controller,broker  
 - KAFKA_CFG_LISTENERS=PLAINTEXT://:9092,CONTROLLER://:9093  
 - KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT  
 - KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=0@kafka:9093  
 - KAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER  
 - KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://kafka:9092  
 - KAFKA_ADVERTISED_HOST_NAME=kafka  

 kafka-ui:  
 image: provectuslabs/kafka-ui:latest  
 depends_on:  
 - kafka  
 container_name: kafka-ui  
 ports:  
 - "8080:8080"  
 environment:  
 KAFKA_CLUSTERS_0_NAME: local  
 KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS: kafka:9092  
 KAFKA_CLUSTERS_0_ZOOKEEPER: zookeeper:2181  

 spark-master:  
 image: bitnami/spark:latest  
 command: bin/spark-class org.apache.spark.deploy.master.Master  
 ports:  
 - "9090:8080"  
 - "7077:7077"  
 networks:  
 - confluent  

 spark-worker:  
 image: bitnami/spark:latest  
 command: bin/spark-class org.apache.spark.deploy.worker.Worker spark://spark-master:7077  
 depends_on:  
 - spark-master  
 environment:  
 SPARK_MODE: worker  
 SPARK_WORKER_CORES: 2  
 SPARK_WORKER_MEMORY: 1g  
 SPARK_MASTER_URL: spark://spark-master:7077  
 networks:  
 - confluent  

 cassandra:  
 image: cassandra:latest  
 container_name: cassandra-container  
 ports:  
 - "9042:9042"  
 environment:  
 - CASSANDRA_USER=admin  
 - CASSANDRA_PASSWORD=admin  
 volumes:  
 - cassandra-data:/var/lib/cassandra  

volumes:  
 cassandra-data:  

networks:  
 confluent:

Покрокова реалізація

1. Веб-додаток магазину книг

Веб-додаток на Flask симулює магазин книг.

Перекладено з: Wagon Accessories and their classification for Passenger and Goods Car

Leave a Reply

Your email address will not be published. Required fields are marked *