这篇文章主要是log4j+flume+kafka的内容
首先从从下面的地址下载flume+kafka的插件包
https://github.com/beyondj2ee/flumeng-kafka-plugin/tree/master/
把libs和package下的jar包拷到kafka的lib文件夹下面 注意package文件夹下面的jar包(flumeng-kafka-plugin.jar)重点注意
在flume下的conf文件夹下面随意建一个文件 例如test.conf
内容如下
producer.sources = s
producer.channels = c
producer.sinks = r
#source section
producer.sources.s.type = avro
producer.sources.s.channels = c
producer.sources.s.bind=120.26.114.217
producer.sources.s.port=12343
# Each sink's type must be defined
producer.sinks.r.type = org.apache.flume.plugins.KafkaSink
producer.sinks.r.metadata.broker.list=120.26.114.217:9092
producer.sinks.r.partition.key=4
producer.sinks.r.partitioner.class=org.apache.flume.plugins.ManyPartition
producer.sinks.r.serializer.class=kafka.serializer.StringEncoder
producer.sinks.r.request.required.acks=0
producer.sinks.r.max.message.size=1000000
producer.sinks.r.producer.type=sync
producer.sinks.r.custom.encoding=UTF-8
producer.sinks.r.custom.topic.name=many
#Specify the channel the sink should use
producer.sinks.r.channel = c
# Each channel's type is defined.
producer.channels.c.type = memory
producer.channels.c.capacity = 100
重点讲一下红色标注的三行
producer.sinks.r.custom.topic.name=many表示把flume采集的内容写到kafka中名叫“many”的topic中
producer.sinks.r.partition.key=4表示传送消息中key为多少 在kafka中的分区一般都是根据key进行分区
producer.sinks.r.partitioner.class=org.apache.flume.plugins.ManyPartition表示kafka的分区方法 org.apache.flume.plugins.ManyPartition这个类是我自己写的 默认的是org.apache.flume.plugins.SinglePartition,SinglePartition类中分区返回都是0
意思为无论我在topic下创建多少分区,flume采集的数据全都会存到第一个分区里面
所以我自己写了一个ManyPartition
可以随机的分配到不同的分区中