flume+kafka实现根据消息的标识分配到不同的分区

需求

在使用flume 收集 log的时候根据 不同的 消息表示可能是uid。或者是日期。等关键字段 。
将消息发送到 kafka不同的分区
这里就不再贴详细代码 主要讲一下自己的思路 。

思路一: 自定义在flume拦截器中 使用 kafka producer 。直接将关键信息 获取之后。根据逻辑。发送到不同的分区 。
主要实现如图:
flume+kafka实现根据消息的标识分配到不同的分区_第1张图片
flume+kafka实现根据消息的标识分配到不同的分区_第2张图片

配置文件修改:
flume-conf.properties
这里写图片描述

code: https://github.com/Smallwhitetogreatgod/hadoop_study/blob/master/src/com/nebo/homework/kafka/an1/TestInterceptor.java

思路二: 使用kafkasink

配置kafka sink

根据官方文档:
http://flume.apache.org/FlumeUserGuide.html#kafka-sink

flume+kafka实现根据消息的标识分配到不同的分区_第3张图片
将uid设置为key 。会自动根据key分区
主要代码 与上面相同 : (获取uid的方法可以使用正则截取。也可以根据log格式转为json对象)
http://blog.csdn.net/justclimbing/article/details/52265874

这里写图片描述
flume+kafka实现根据消息的标识分配到不同的分区_第4张图片

1.启动各个节点的zookeeper ,kafka服务。
2.启动 flume 启动对应的配置文件 为上图。
3 。在另外的节点启动消费者 ; bin/kafka-console-consumer.sh –zookeeper localhost:2181 –topic nebo_test
4、然后在Zookeeper 找到console 消费者组console-consumer-xxx
ls /consumers
5、查看消费者组console-consumer-xxx下的kafka-topic1每个partition数据消费情况
bin/kafka-run-class.sh kafka.tools.ConsumerOffsetChecker –zookeeper localhost:2181 –group console-consumer-xxx

通过打印的log以及查看的结果可以看到不同的uid分到了不同的分区(截图省略)。
问题1: 分区的个数要看你配置文件的个数。当然也可以使用命令更改
问题2: 启动过程中如果出现问题。查看zookeeper ,flume,kafka的log文件 。

以上为自己在学习中的一点小总结。不足的地方。希望大家多多指正,谢谢!

你可能感兴趣的:(bigdata)