damklis/DataEngineeringProject
damklis/DataEngineeringProject has 1,447 GitHub stars and 284 forks. GitHot measured -1 in 7 days and 0 in 15 days. Last checked 2026-11-11 09:54 UTC. Last push 2022-12-08.
Example end to end data engineering project.
측정된 스타 증가
- in 24h
- 업데이트 지연
- in 7 days
- -1
- in 15 days
- 0
- in 1 month
- 기록 수집 중
서로 겹치는 기간의 순증가량이며 일별 합계가 아닙니다. 측정값이 없으면 비워 둡니다. 스타는 관심도를 나타내며 품질을 보장하지 않습니다.
README.md
OriginalData Engineering Project
Data Engineering Project is an implementation of the data pipeline which consumes the latest news from RSS Feeds and makes them available for users via handy API. The pipeline infrastructure is built using popular, open-source projects.
Access the latest news and headlines in one place. :muscle:
Table of Contents
- Architecture diagram
- How it works
- Prerequisites
- Running project
- Testing
- API service
- References
- Contributions
- License
- Contact
Architecture diagram

How it works
Data Scraping
Airflow DAG is responsible for the execution of Python scraping modules. It runs periodically every X minutes producing micro-batches.
First task updates proxypool. Using proxies in combination with rotating user agents can help get scrapers past most of the anti-scraping measures and prevent being detected as a scraper.
Second task extracts news from RSS feeds provided in the configuration file, validates the quality and sends data into Kafka topic A. The extraction process is using validated proxies from proxypool.
Data flow
- Kafka Connect Mongo Sink consumes data from Kafka topic A and stores news in MongoDB using upsert functionality based on _id field.
- Debezium MongoDB Source tracks a MongoDB replica set for document changes in databases and collections, recording those changes as events in Kafka topic B.
- Kafka Connect Elasticsearch Sink consumes data from Kafka topic B and upserts news in Elasticsearch. Data replicated between topics A and B ensures MongoDB and ElasticSearch synchronization. Command Query Responsibility Segregation (CQRS) pattern allows the use of separate models for updating and reading information.
- Kafka Connect S3-Minio Sink consumes records from Kafka topic B and stores them in MinIO (high-performance object storage) to ensure data persistency.
Data access
- Data gathered by previous steps can be easily accessed in API service using public endpoints.
Prerequisites
Software required to run the project. Install:
- Docker - You must allocate a minimum of 8 GB of Docker memory resource.
- Python 3.8+ (pip)
- docker-compose
Running project
Script manage.sh - wrapper for docker-compose works as a managing tool.
- Build project infrastructure
./manage.sh up
- Stop project infrastructure
./manage.sh stop
- Delete project infrastructure
./manage.sh down
Testing
Script run_tests.sh executes unit tests against Airflow scraping modules and Django Rest Framework applications.
./run_tests.sh
API service
Read detailed documentation on how to interact with data collected by pipeline using search endpoints.
Example searches:
- see all news
http://127.0.0.1:5000/api/v1/news/
- add
search_fieldstitle and description, see all of the news containing theRobert Lewandowskiphrase
http://127.0.0.1:5000/api/v1/news/?search=Robert%20Lewandowski
- find news containing the
Lewandowskiphrase in their titles
http://127.0.0.1:5000/api/v1/news/?search=title|Lewandowski
- see all of the polish news containing the
Lewandowskiphrase
http://127.0.0.1:5000/api/v1/news/?search=lewandowski&language=pl
References
Inspired by following codes, articles and videos:
- How we launched a data product in 60 days with AWS
- Toruń JUG #55 - "Kafka Connect - szwajcarski scyzoryk w rękach inżyniera?" - Mariusz Strzelecki
- Kafka Elasticsearch Sink Connector and the Power of Single Message Transformations
- Docker Tips and Tricks with Kafka Connect, ksqlDB, and Kafka
Contributions
Contributions are what makes the open-source community such an amazing place to learn, inspire, and create. Any contributions you make are greatly appreciated.
- Fork the Project
- Create your Feature Branch (
git checkout -b feature/AmazingFeature) - Commit your Changes (
git commit -m 'Add some AmazingFeature') - Push to the Branch (
git push origin feature/AmazingFeature) - Open a Pull Request
License
Distributed under the MIT License. See LICENSE for more information.
Contact
Please feel free to contact me if you have any questions. Damian Kliś @DamianKlis
관련 프로젝트 살펴보기
Asabeneh/30-Days-Of-Python
30 Days of Python 프로그래밍 챌린지는 Python 프로그래밍 언어를 30일 동안 배우기 위한 단계별 가이드입니다. 이 챌린지는 100일 이상 걸릴 수 있습니다. 자신의 속도에 맞춰 진행하세요. 다음 동영상도 도움이 될 수 있습니다: https://www.youtube.com/channel/UC7PNRuno1rzYPb1xLa4yktw
78,560 스타grafana/grafana
개방적이고 조합 가능한 옵저버빌리티 및 데이터 시각화 플랫폼입니다. Prometheus, Loki, Elasticsearch, InfluxDB, Postgres 등 여러 소스의 메트릭, 로그, 트레이스를 시각화합니다.
77,830 스타redis/redis
실시간 데이터 기반 애플리케이션을 구축하는 개발자에게 Redis는 가장 선호되고, 가장 빠르며, 기능이 가장 풍부한 캐시, 데이터 구조 서버이자 문서 및 벡터 쿼리 엔진입니다.
77,395 스타apache/superset
Apache Superset는 데이터 시각화 및 데이터 탐색 플랫폼입니다.
75,473 스타