L ingestion est souvent le premier maillon de la stack data. En entretien, on évalue la capacité à choisir entre Fivetran et Airbyte, à configurer des connecteurs custom et à gérer le CDC.
1EL vs ELT vs ETL
Question discriminante
Quelle est la différence entre ETL et ELT ? Pourquoi le ELT est-il dominant en 2025 ?
- ETL — Extract, Transform, Load : transformation avant le chargement. L ère des entrepôts on-premise avec puissance de calcul limitée
- ELT — Extract, Load, Transform : charger brut, transformer dans le warehouse. Possible car les cloud warehouses (BigQuery, Snowflake) sont très puissants
- EL — Extract, Load uniquement : Fivetran/Airbyte font l EL, dbt fait le T. Séparation claire des responsabilités
- Pourquoi ELT domine — les transformations SQL dans BigQuery/Snowflake sont moins chères et plus rapides que des transformations Spark dans un ETL custom
2Fivetran : le standard managé
Question discriminante
Quels sont les avantages de Fivetran par rapport à un connecteur custom ?
- Points forts — 500+ connecteurs maintenus, zero maintenance, gestion automatique des schémas évolutifs, support 24/7
- Fivetran HVR — module de CDC haute performance pour les bases transactionnelles volumineuses
- Transformations Fivetran — dbt intégré pour les transformations post-ingestion
- Limite — coût élevé pour les gros volumes (tarification par volume de lignes)
- Quand choisir Fivetran — équipe sans expertise DE, sources standards (Salesforce, HubSpot, bases SQL classiques), besoin de zéro maintenance
3Airbyte : l open source flexible
Question discriminante
En quoi Airbyte est-il différent de Fivetran ?
# Déploiement Airbyte sur Docker (développement local)
docker-compose -f docker-compose.yaml up -d
# Interface web sur http://localhost:8000
# Connecteur custom Python (Airbyte CDK)
from airbyte_cdk.sources import AbstractSource
from airbyte_cdk.models import SyncMode
class CustomAPISource(AbstractSource):
def check_connection(self, logger, config):
# Vérifier que l API est accessible
response = requests.get(config['api_url'])
return response.status_code == 200, None
def streams(self, config):
return [OrdersStream(config), CustomersStream(config)]
- Open source — hébergeable sur son infra. Airbyte Cloud pour la version managée
- CDK Python — écrire un connecteur custom en Python avec le Connector Development Kit
- Moins de connecteurs — moins de 400 connecteurs vs 500+ pour Fivetran, mais suffisant pour la plupart des cas
4Airbyte vs Fivetran : quel choix ?
| Fivetran | Airbyte Cloud | Airbyte self-hosted |
|---|
| Maintenance | Zéro | Minimale | Gérée par l équipe |
| Connecteurs | 500+ (enterprise-grade) | 400+ | 400+ + custom |
| Coût | Élevé (par volume) | Modéré | Infrastructure uniquement |
| Flexibilité | Faible | Moyenne | Maximale |
| CDC | Excellent (HVR) | Bon | Bon |
| Idéal pour | Sources standards, zéro maintenance | Mix sources standards + custom | Contraintes de sécurité, budget serré |
5Connecteurs custom : quand et comment
Question discriminante
Dans quel cas créez-vous un connecteur custom plutôt que d utiliser un connecteur standard ?
- API propriétaire — aucun connecteur standard ne couvre votre source de données
- Authentification complexe — OAuth2 avec rotation de tokens, certificats mutuels
- Format exotique — fichiers XML, EDI, formats métier spécifiques
- Options — Airbyte CDK (Python), Singer (standard ouvert), ou script Python personnalisé orchestré par Airflow
6CDC : Change Data Capture
Question discriminante
Qu est-ce que le CDC ? Comment l implémentez-vous avec Fivetran ou Airbyte ?
- CDC — capturer les modifications (INSERT, UPDATE, DELETE) d une base transactionnelle en temps quasi-réel
- Log-based CDC — lit le binlog MySQL / WAL PostgreSQL. Impact minimal sur la base source. Fivetran HVR, Debezium
- Timestamp-based — filtre sur updated_at. Simple mais ne capture pas les suppressions
- Full refresh — recharge toute la table. Simple mais coûteux sur les grandes tables
- Fivetran HVR — solution de CDC enterprise haute performance, supporte Oracle, DB2, SAP
Production tip : versionner la configuration des connecteurs via l'API Airbyte ou Terraform provider. En cas de rupture de schéma source, Airbyte stoppe le sync automatiquement — configurer des alertes Slack sur les sync failures.
- Airbyte Cloud vs self-hosted — Cloud : zéro maintenance, facturation à la ligne. OSS self-hosted : contrôle total, gratuit, mais upgrades à gérer
- Custom connectors CDK — Airbyte Connector Development Kit Python : créer un connecteur REST en 2-3h. Idéal pour les sources internes ou APIs non couvertes
- Fivetran HVA (High Volume Agent) — sync sub-minute pour les sources critiques (Salesforce, NetSuite). L'agent standard suffit dans 90% des cas
- Transformations post-sync — Airbyte peut déclencher des jobs dbt après chaque sync via la configuration de destination. Remplace le déclenchement manuel
- Monitoring — surveiller sync_success_rate et volume de lignes par sync. Un sync 3x plus long = signal d'alarme (changement de volume source ou timeout)
import requests
AIRBYTE_URL = 'http://airbyte:8000/api/v1'
# Creer une source Postgres via API
source = requests.post(f'{AIRBYTE_URL}/sources/create', json={
'name': 'postgres-prod',
'workspaceId': 'workspace-id',
'sourceDefinitionId': 'decd338e-5647-4c0e-aed4-642ebc15b5b2',
'connectionConfiguration': {
'host': 'postgres.internal',
'port': 5432,
'database': 'ecommerce',
'username': 'airbyte_user',
'password': '${POSTGRES_PASSWORD}',
'replication_method': {'method': 'CDC'}
}
}).json()
# Connexion avec scheduling
conn = requests.post(f'{AIRBYTE_URL}/connections/create', json={
'sourceId': source['sourceId'],
'destinationId': 'dest-snowflake-id',
'scheduleType': 'cron',
'scheduleData': {'cron': {'cronExpression': '0 * * * * ?', 'cronTimeZone': 'UTC'}}
}).json()
- CDC (Change Data Capture) - Airbyte Postgres CDC via Debezium lit le WAL. Capture INSERT/UPDATE/DELETE sans polling. Latence quasi-temps-reel
- Airbyte vs Fivetran - Fivetran : zero maintenance, 300+ connecteurs enterprise, cout eleve a volume. Airbyte : open source, connecteurs custom, self-hosted
- Schema drift handling - configurer la reaction aux changements de schema source : propagate (ajouter la colonne), ignore, ou fail (stopper le sync)
- Normalization post-sync - Airbyte Basic Normalization transforme le JSON en tables relationnelles. Pour la transformation avancee : dbt post-sync
- Monitoring - alertes sur sync failures via webhooks. Suivre le sync success rate et le lag par connexion
7Grille par niveau
| Niveau | Maitrise | Signal GO | NO-GO |
|---|
| Confirmé | ELT vs ETL, Fivetran ou Airbyte, CDC basique | A configuré un connecteur Fivetran ou Airbyte, explique ELT vs ETL | Ne sait pas la différence entre ELT et ETL |
| Senior | Connecteurs custom, CDC log-based, choix selon contexte | A écrit un connecteur custom Airbyte, compare Fivetran vs Airbyte selon le contexte | Ne sait pas ce qu est le CDC log-based |
1Airbyte vs Fivetran: choosing the right tool
Key question
When do you choose Airbyte over Fivetran? What are the deciding criteria?
- Fivetran — fully managed, 300+ enterprise connectors, automatic schema migrations. Zero maintenance but high cost at volume. Ideal for teams without data ops resources
- Airbyte — open source, self-hostable or Cloud, custom connector CDK in Python. More flexible, lower cost, but requires infrastructure management
- Decision criteria — budget, available connectors, team ops capacity, data volume. Fivetran for fast bootstrapping, Airbyte for control and customization
- Airbyte CDK — create a custom REST connector in 2-3 hours. Ideal for internal sources or APIs not covered by standard connectors
2Sync modes and strategies
Key question
What is the difference between full_refresh and incremental? When do you use append vs dedupe?
- full_refresh | overwrite — complete resync at each run. Simple but expensive on large tables. Reserved for small reference tables
- full_refresh | append — complete resync added at each run. Creates duplicates. Useful for historical snapshots
- incremental | append — only new records added. Requires a cursor (updated_at). Risk of duplicates on retry
- incremental | append_dedup — incremental + deduplication on unique_key. The most common mode in production
- Cursor field — the column used to filter new records (updated_at, created_at, id). Must be reliable: if the source doesn't update updated_at correctly, changes are missed
3CDC: Change Data Capture
Key question
What is CDC? How does Airbyte implement it for Postgres?
- CDC — captures INSERT/UPDATE/DELETE in real time from the database transaction log. No polling, near-real-time latency
- Postgres CDC (Debezium) — reads the WAL (Write-Ahead Log). Requires logical replication enabled:
wal_level = logical
- CDC vs incremental polling — CDC: captures DELETEs, sub-minute latency, no impact on source DB. Polling: simpler, but misses deletes and requires a reliable cursor
- Fivetran CDC — available natively on most connectors. Fivetran manages WAL readers and replication slots
import requests
AIRBYTE_URL = 'http://airbyte:8000/api/v1'
source = requests.post(f'{AIRBYTE_URL}/sources/create', json={
'name': 'postgres-prod',
'sourceDefinitionId': 'decd338e-5647-4c0e-aed4-642ebc15b5b2',
'connectionConfiguration': {
'host': 'postgres.internal', 'port': 5432,
'database': 'ecommerce', 'username': 'airbyte_user',
'replication_method': {'method': 'CDC'}
}
}).json()
4Schema drift handling
Key question
What happens when the source schema changes? How do you configure handling in Airbyte?
- Schema drift — a column is added, renamed or deleted in the source. Without handling: pipeline fails silently or corrupts data
- Propagate — automatically add new columns in the destination. Recommended for non-breaking changes
- Ignore — keep old schema, ignore new columns. Risk of silent data loss
- Fail — block the sync if schema changes. Forces human review. Recommended for critical tables
- Fivetran — automatic migration by default: new columns added, renamed columns tracked with _fivetran_synced suffix
5Monitoring syncs in production
Key question
How do you monitor your Airbyte/Fivetran connectors in production?
- Sync success rate — % of successful syncs over the last 7 days. Below 95% = connector problem to investigate
- Sync lag — delay between source and destination. A sync that runs 3x longer than usual = volume change or connection timeout
- Alerting — failure webhooks (Slack, PagerDuty) on each sync failure. Don't wait for a user to report missing data
- Volume monitoring — sudden -80% of synced rows = likely source-side filtering problem
- Destination quality — dbt tests post-sync to validate that ingested data meets business expectations
6Level assessment grid
| Level | Mastery | GO signal | NO-GO |
| Junior | Knows Airbyte or Fivetran, basic sync modes | Configured a full_refresh connector, knows the difference between append and dedup | Has never configured an ELT connector, confuses ETL and ELT |
| Confirmed | CDC, schema drift, incremental strategies, monitoring | Has set up CDC on Postgres, configured schema drift handling, monitors sync failures | Doesn't know what CDC is, has never handled schema drift |
| Senior | Architecture ELT, Airbyte vs Fivetran choice, CDK custom connectors | Justifies tool choice by context, has built a custom CDK connector, has managed connector migration | Can't justify choosing Airbyte over Fivetran for a given context |