Avant de connecter flume et kafka, nous devons savoir pourquoi ils ont besoin de connecter ces deux systèmes:
1. Dans l'environnement de production, les journaux sont souvent lus pour analyse, et il s'agit souvent d'une source multi-données, si vous l'utilisez seul. très gênant si Kafka construit plusieurs producteurs pour utiliser des flux de fichiers pour écrire des données dans le sujet, puis pour que les consommateurs les consomment (l'avantage de leur ancrage ici est de collecter des fichiers journaux pour plusieurs systèmes à utiliser).
2. Flume peut utiliser des intercepteurs pour traiter les données en temps réel . Ceux-ci sont très utiles pour le blindage ou l'excès de données. Kafka a besoin d'un système de traitement de flux externe pour le faire.
3. Si Flume est directement connecté à l'infrastructure de calcul en temps réel, lorsque la vitesse de collecte des données est supérieure à la vitesse de traitement des données, l'accumulation ou la perte de données est susceptible de se produire, et kafka peut être utilisé comme file d'attente de tampon de messages, ce qui peut stocker des données pendant une période de temps pour réduire les pics .
Étapes pour connecter flume et kafka:
1. Créez le fichier kafka.conf dans le répertoire / opt / module / flume / job de la machine hadoop102.
Ici, nous utilisons netcat pour Source, Memory Channel pour Channel et Kafka pour Sink. Sink Remplissez ensuite le contenu suivant:
Faites attention au a1.sinks.k1.kafka.topic = xxx dans Sink dans la configuration, et écrivez votre propre sujet dans Kafka ici. a1.sinks.k1.kafka.bootstrap.servers = xxx Écrivez ici le nom d'hôte de votre cluster, et 9092 est le numéro de port de Kafka.
#Name
a1.sources = r1
a1.channels = c1
a1.sinks = k1
#Source
a1.sources.r1.type = netcat
a1.sources.r1.bind = localhost
a1.sources.r1.port = 44444
#Channel
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100
#Sink
a1.sinks.k1.type = org.apache.flume.sink.kafka.KafkaSink
a1.sinks.k1.kafka.topic = demo2
a1.sinks.k1.kafka.bootstrap.servers = hadoop102:9092,hadoop103:9092,hadoop104:9092
a1.sinks.k1.kafka.flumeBatchSize = 20
a1.sinks.k1.kafka.producer.acks = 1
a1.sinks.k1.kafka.producer.linger.ms = 1
#Bind
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1
2. Une fois le contenu ci-dessus enregistré, démarrons kafka et zookeeper dans le cluster.
Notez que vous devez d'abord démarrer zk et
exécuter bin / zhServer.sh dans le répertoire d'installation de kafka zk démarrer le
répertoire d'installation de kafka exécuter bin / kafka-server- start.sh- démon config / server.properties
3. Démarrez un consommateur sur hadoop102 et
exécutez- bin/kafka-consumer-consumer.sh --zookeeper hadoop102:2181 --topic demo2
le dans le répertoire d'installation de kafka. Ici, j'utilise le thème demo2
Ensuite, ouvrez deux fenêtres hadoop102 dans Xshell, une pour ouvrir flume, exécutez [root @ hadoop102 flume] # bin / flume-ng agent -c conf / -f job / kafka.conf -n dans le répertoire d'installation de flume a1
Entrez ensuite le contenu dans une autre fenêtre [root @ hadoop102 ~] # nc localhost 44444
Ensuite, nous lui envoyons n'importe quel contenu, et nous pouvons voir que nos messages après flume peuvent toujours être reçus dans Kafka.