flume+kafka (分区实现 默认单分区)

时间:2024-01-02 20:45:02

这篇文章主要是log4j+flume+kafka的内容

首先从从下面的地址下载flume+kafka的插件包

https://github.com/beyondj2ee/flumeng-kafka-plugin/tree/master/

flume+kafka  (分区实现  默认单分区)

把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

flume+kafka  (分区实现  默认单分区)

意思为无论我在topic下创建多少分区,flume采集的数据全都会存到第一个分区里面

所以我自己写了一个ManyPartition

flume+kafka  (分区实现  默认单分区)

可以随机的分配到不同的分区中