[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-81034":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":8,"htmlUrl":8,"language":9,"languages":8,"totalLinesOfCode":8,"stars":10,"forks":11,"watchers":12,"openIssues":13,"contributorsCount":13,"subscribersCount":13,"size":13,"stars1d":12,"stars7d":14,"stars30d":15,"stars90d":13,"forks30d":13,"starsTrendScore":14,"compositeScore":16,"rankGlobal":8,"rankLanguage":8,"license":8,"archived":17,"fork":17,"defaultBranch":18,"hasWiki":19,"hasPages":17,"topics":20,"createdAt":8,"pushedAt":8,"updatedAt":21,"readmeContent":22,"aiSummary":23,"trendingCount":13,"starSnapshotCount":13,"syncStatus":24,"lastSyncTime":25,"discoverSource":26},81034,"banking-kafka-grafana-demo","itsnect\u002Fbanking-kafka-grafana-demo","itsnect",null,"Python",33,19,1,0,3,4,41.8,false,"main",true,[],"2026-06-12 04:01:31","# NECT — Kafka Demo: Transacciones Bancarias en Tiempo Real\n\nDemo para el video de YouTube **\"Kafka desde cero\"** y **\"ksqlDB desde cero\"**.\n\n## Stack\n\n- **Kafka** (Confluent 7.6) + Zookeeper\n- **PostgreSQL 16** — persistencia de transacciones\n- **Prometheus** — scraping de métricas\n- **Grafana** — dashboard en tiempo real\n- **ksqlDB** — queries SQL sobre streams en tiempo real\n- **ksqlDB UI** — interfaz web para ksqlDB\n- **Python** — producer y consumers con Rich + kafka-python\n\n## Caso de uso\n\nUn cliente hace una transacción → el evento entra a Kafka → 3 consumer groups lo procesan en paralelo:\n\n| Consumer | Group ID | Función |\n|---|---|---|\n| A | `persistencia-db` | Inserta en PostgreSQL |\n| B | `deteccion-fraude` | Detecta fraude → publica en topic `alertas` |\n| C | `metricas-grafana` | Actualiza métricas Prometheus |\n| Alertas | `log-alertas` | Consume topic `alertas` y loguea |\n\nAdemás, **ksqlDB** se conecta al mismo topic `transacciones` y permite hacer queries SQL en tiempo real sin tocar el código existente.\n\n---\n\n## Setup\n\n### 1. Levantar infraestructura\n\n```bash\ndocker compose up -d\n```\n\nEsperar ~30 segundos para que Kafka esté listo. Verificar con:\n\n```bash\ndocker compose ps\n```\n\nDeben aparecer 9 servicios en estado `Up`: zookeeper, kafka, postgres, prometheus, grafana, ksqldb-server, ksqldb-cli, ksqldb-ui.\n\n### 2. Instalar dependencias Python\n\n```bash\npip install -r requirements.txt\n```\n\n### 3. Orden de ejecución (terminales separadas)\n\n**Terminal 1 — Consumer A (PostgreSQL):**\n```bash\npython consumers\u002Fconsumer_a_persistencia.py\n```\n\n**Terminal 2 — Consumer B (Fraude):**\n```bash\npython consumers\u002Fconsumer_b_fraude.py\n```\n\n**Terminal 3 — Consumer C (Métricas):**\n```bash\npython consumers\u002Fconsumer_c_metricas.py\n```\n\n**Terminal 4 — Consumer Alertas:**\n```bash\npython consumers\u002Fconsumer_alertas.py\n```\n\n**Terminal 5 — Producer interactivo (demo) o Producer automático:**\n```bash\n# Demo manual — evento por evento\npython producer\u002Fproducer_demo.py\n\n# O producer automático en loop\npython producer\u002Fproducer.py\n```\n\n### 4. Ver dashboards\n\n| Servicio | URL | Credenciales |\n|---|---|---|\n| Grafana | http:\u002F\u002Flocalhost:3000 | admin \u002F nect123 |\n| Prometheus | http:\u002F\u002Flocalhost:9090 | — |\n| ksqlDB UI | http:\u002F\u002Flocalhost:8080 | — |\n\nEn Grafana: ** Kafka Demo → Transacciones en Tiempo Real**\n\n---\n\n## ksqlDB — Queries SQL sobre Kafka\n\n### Entrar a la CLI\n\n```bash\ndocker exec -it kafka-demo-ksqldb-cli-1 ksql-connect.sh http:\u002F\u002Fkafka-demo-ksqldb-server-1:8088\n```\n\n### Crear el stream sobre el topic existente\n\n```sql\nCREATE STREAM transacciones (\n  evento_id VARCHAR,\n  rut       VARCHAR,\n  nombre    VARCHAR,\n  tipo      VARCHAR,\n  monto     DOUBLE,\n  region    VARCHAR\n) WITH (\n  KAFKA_TOPIC='transacciones',\n  VALUE_FORMAT='JSON'\n);\n```\n\n### Queries útiles\n\n```sql\n-- Ver todos los streams\nSHOW STREAMS;\n\n-- Ver todos los topics\nSHOW TOPICS;\n\n-- Filtrar transacciones sospechosas en tiempo real\nSELECT nombre, tipo, monto, region\nFROM transacciones\nWHERE monto > 2000000\nEMIT CHANGES;\n\n-- Conteo por tipo cada 30 segundos\nSELECT tipo,\n       COUNT(*) AS total,\n       SUM(monto) AS monto_total\nFROM transacciones\nWINDOW TUMBLING (SIZE 30 SECONDS)\nGROUP BY tipo\nEMIT CHANGES;\n\n-- Stream derivado persistente — crea nuevo topic en Kafka\nCREATE STREAM alertas_ksql AS\n  SELECT evento_id, nombre, rut, monto, region,\n         'MONTO_ALTO' AS motivo\n  FROM transacciones\n  WHERE monto > 2000000\nEMIT CHANGES;\n```\n\n### ksqlDB UI\n\nAbrir `http:\u002F\u002Flocalhost:8080` — interfaz web para ejecutar queries sin usar la terminal.\n\n---\n\n## Estructura del proyecto\n\n```\nkafka-demo\u002F\n├── docker-compose.yml\n├── prometheus.yml\n├── requirements.txt\n├── development.toml               # Config de ksqlDB UI\n├── schema.py                      # Modelo + datos mock chilenos\n├── init-scripts\u002F\n│   └── init.sql                   # Schema PostgreSQL\n├── producer\u002F\n│   ├── producer.py                # Genera eventos en loop automático\n│   └── producer_demo.py           # Producer interactivo (demo en cámara)\n├── consumers\u002F\n│   ├── consumer_a_persistencia.py # → PostgreSQL\n│   ├── consumer_b_fraude.py       # → topic alertas\n│   ├── consumer_c_metricas.py     # → Prometheus\u002FGrafana\n│   └── consumer_alertas.py        # lee topic alertas\n└── grafana\u002F\n    ├── datasources\u002Fprometheus.yml\n    └── dashboards\u002F\n        ├── dashboard.yml\n        └── nect-kafka.json\n```\n\n## Topics Kafka\n\n| Topic | Descripción |\n|---|---|\n| `transacciones` | Eventos principales del producer |\n| `alertas` | Alertas de fraude generadas por consumer B |\n| `alertas_ksql` | Stream derivado de ksqlDB (si se crea) |","该项目是一个用于实时银行交易处理的演示系统。它利用Kafka作为消息队列，结合PostgreSQL进行数据持久化存储，Prometheus收集系统指标，并通过Grafana展示实时监控面板。此外，项目还集成了ksqlDB，允许用户直接对Kafka中的流数据执行SQL查询，无需修改现有代码即可实现复杂的数据处理逻辑。适合于需要构建或学习基于事件驱动架构、特别是金融领域内实时数据分析与处理的应用场景。整个技术栈包括Python编写的生产者和消费者程序，以及一系列易于部署的Docker容器服务。",2,"2026-06-11 04:03:15","CREATED_QUERY"]