Flume有两种方式给消息输入到Kafka中,一种是Kafka channel,另外一种是Kafka sink .
Kafka Sink
步骤:
1)配置flume(flume-kafka.conf)
# definea1.sources = r1a1.sinks = k1a1.channels = c1# sourcea1.sources.r1.type = execa1.sources.r1.command = tail -F -c +0 /opt/module/datas/flume.loga1.sources.r1.shell = /bin/bash -c# sinka1.sinks.k1.type = org.apache.flume.sink.kafka.KafkaSinka1.sinks.k1.kafka.bootstrap.servers = zjj101:9092,zjj102:9092,zjj103:9092a1.sinks.k1.kafka.topic = first# 一次批量发送20个a1.sinks.k1.kafka.flumeBatchSize = 20a1.sinks.k1.kafka.producer.acks = 1a1.sinks.k1.kafka.producer.linger.ms = 1# channela1.channels.c1.type = memorya1.channels.c1.capacity = 1000a1.channels.c1.transactionCapacity = 100# binda1.sources.r1.channels = c1a1.sinks.k1.channel = c1
2) 启动kafkaIDEA消费者
package com.consumer;import org.apache.kafka.clients.consumer.ConsumerRecord;import org.apache.kafka.clients.consumer.ConsumerRecords;import org.apache.kafka.clients.consumer.KafkaConsumer;import java.util.Arrays;import java.util.Properties;public class CustomConsumer {public static void main(String[] args) {Properties props = new Properties();props.put("bootstrap.servers", "zjj101:9092");props.put("group.id", "test");//enable.auto.commit:是否开启自动提交offset功能props.put("enable.auto.commit", "true");//auto.commit.interval.ms:自动提交offset的时间间隔props.put("auto.commit.interval.ms", "1000");props.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");props.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");KafkaConsumer<String, String> consumer = new KafkaConsumer<>(props);//订阅 名字为 first的 topic ,可以订阅好几个topicconsumer.subscribe(Arrays.asList("first"));while (true) {//拉取时间,如果拉取时间超过这个时间还没拉取出来数据就算拉失败了ConsumerRecords<String, String> records = consumer.poll(100);for (ConsumerRecord<String, String> record : records) {System.out.printf("offset = %d, key = %s, value = %s%n", record.offset(), record.key(), record.value());//输出: offset = 400, key = 0, value = 0}}}}
3) 进入flume根目录下,启动flume
$ bin/flume-ng agent -c conf/ -n a1 -f jobs/flume-kafka.conf
4) 向 /opt/module/datas/flume.log里追加数据,查看kafka消费者消费情况
$ echo hello >> /opt/module/datas/flume.log
