由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - 关于Kafka,一个log数据处理的问题
相关主题
kafka vs fluentd有专门讲 message server performance 的资料吗
ES怎么玩?Celery in Golang and Scala?
scala支持Restful web service的问题对分布式软件的Jepsen测试
关于es的缺点哪个框架最适合快速开发手机app后台的web service?运算量比较
搜索 lucene 之类是不是不流行了?The rewards of running server-side JavaScript revealed
选择 WCF 还是 ASP.NET WebApi看到这么一段
A questionHTML form: 用输入的ZIP CODE自动产生City和State名字
c++的两大威胁好了,现在可以发布我的发明之一了,物联网App Engine
相关话题的讨论汇总
话题: log话题: kafka话题: tp话题: 同一个话题: 00
进入Programming版参与讨论
1 (共1页)
m***h
发帖数: 77
1
我有这么一个问题拿不定主意。
在一个team/group/organization里sell这个big data最好的方式就是在不动
production或用最小的cost的前提下提供现系统不能提供的feature。譬如,我们一个
大app,一堆API,一堆server,每个API都写很多(大部分是垃圾)到本地的log files
。可以想象一个login API,当一个user login后,一个thread会产生如下的log (实
际的log各种花样没这么简单)
[2015-10-11 02:00:00] TP-123 com.xyz.api.login INFO BEGIN
[2015-10-111 02:00:00] TP-123 com.xyz.api.login INFO user abcd is in
[2015-10-11 02:00:00] TP-123 com.xyz.api.login INFO use is from IP 1.2.3
.4
[2015-10-11 02:00:00] TP-123 com.xyz.api.login INFO user has permission
X,Y,Z
[2015-10-11 02:00:00] TP-123 com.xyz.api.login INFO END
这里TP-123 是thread name,在这里我想拿到的数据就是
user abcd ip 1.2.3.4 permission x,y,z
实际中一个tomcat上只有一个app,但有很多thread在写log到file里,而且这同一个
thread以后会处理别的API。不过在同一个log file里,我可以用thread来group这些
log,因为有明确的begin和end,我可以拿出想要的数据。
我有一个cron job, 每10分钟去各个server copy log files到Hadoop,然后一个
mapred job用filename和thread来map这些lines,再抓出每个user的数据。
现在想法是想把这套搞成实时的,一个方案是用logstash或fluentd tail这些log
files,送到kafka,然后写consumer来处理。问题是这样一来一大堆log lines被分散到
不同的Kafka partition,从Kafka consumer的角度它不能保证处理同一个server
thread 的messges/log lines(上面例子)。。。。一个方案是用server name做
message tag (fluentd),同时也做partition
key,这样能保证同一个server的log到同一个partition.
我想这个问题应该是很普遍的,想知道其他公司怎么解决的。
m***h
发帖数: 77
2
我想怎么都得用server name做message Tag (这样server name就在message JSON里了)
,因为server, thread和timestamp是决定log的三个缺一不可的因素。用server Tag
做partition key可以保证同一个server的log被发到同一个kafka partition, 在同一
个partition里message是keep order的,然后再在同一个consumer group里,同一个
partition总是分到同一个consumer,就是说不会出现两个同样的consumer 处理同一个
partition,觉得应该是work的。
f********x
发帖数: 99
3
说了一大堆,不知道你到底想问什么问题? collectd => Kafka => Flink or Spark
Streaming => Kafka => C* or other NoSQL可能是你需要的架构。

了)
Tag

【在 m***h 的大作中提到】
: 我想怎么都得用server name做message Tag (这样server name就在message JSON里了)
: ,因为server, thread和timestamp是决定log的三个缺一不可的因素。用server Tag
: 做partition key可以保证同一个server的log被发到同一个kafka partition, 在同一
: 个partition里message是keep order的,然后再在同一个consumer group里,同一个
: partition总是分到同一个consumer,就是说不会出现两个同样的consumer 处理同一个
: partition,觉得应该是work的。

a*****n
发帖数: 63
4
为什么要先把log file collect一下。每个thread是不是应该实时向kafka发log event
d*******r
发帖数: 3299
5
你说这个我有体会,就是采集 log 的时候,如果不加入很重要的一些 fields, 就会
information loss。后面的分析,是后面的事情, 但是开始采集的时候,该加的 field
一定要加, 不然后面分析功能再fancy,也会缺信息.
这个主要看采集的模块,logstash(Ruby, JRuby, Go), fluentd(Ruby), 还有 Heka(Go
).
大概2年以前我用过 logstash, fluentd. logstash 乱糟糟的,filter/modifier功能
多,你按照写入的 log 加点 fields 问题不大. fluentd 我感觉用着舒服很多,
filter/modifier 少一点. 但是我是2年前用的,现在 logstash 跟着 ElasticSearch
有过一次大升级,质量应该好不少.
如果我现在做log采集,应该会试 Heka. 看着还挺不错的.
你可以回来分享下,后续的经验.

了)
Tag

【在 m***h 的大作中提到】
: 我想怎么都得用server name做message Tag (这样server name就在message JSON里了)
: ,因为server, thread和timestamp是决定log的三个缺一不可的因素。用server Tag
: 做partition key可以保证同一个server的log被发到同一个kafka partition, 在同一
: 个partition里message是keep order的,然后再在同一个consumer group里,同一个
: partition总是分到同一个consumer,就是说不会出现两个同样的consumer 处理同一个
: partition,觉得应该是work的。

m***h
发帖数: 77
6
是的,我的问题不是关于架构,拿轮子搭积木不难。在log处理这方面,syslog,
access log之类都很简单,因为都是one liner,well defined format。application
log,或user activity log就不同,因为有用的数据往往分散在很多message里 (像我
上面的例子),不管你是用什么message broker, 在consumer这端需要从新group,经常
需要把来自同一个request乃至同一个user的message数据合在一起,这才是我需要解决
的,因为我不像想在app端大改,所以选择用server name做message tag,和kafka
partition key (我用的是fluentd),这样同一个server的message就能被同一个
consumer处理。
c*********e
发帖数: 16335
7
能按照topic来group吗?

application

【在 m***h 的大作中提到】
: 是的,我的问题不是关于架构,拿轮子搭积木不难。在log处理这方面,syslog,
: access log之类都很简单,因为都是one liner,well defined format。application
: log,或user activity log就不同,因为有用的数据往往分散在很多message里 (像我
: 上面的例子),不管你是用什么message broker, 在consumer这端需要从新group,经常
: 需要把来自同一个request乃至同一个user的message数据合在一起,这才是我需要解决
: 的,因为我不像想在app端大改,所以选择用server name做message tag,和kafka
: partition key (我用的是fluentd),这样同一个server的message就能被同一个
: consumer处理。

1 (共1页)
进入Programming版参与讨论
相关主题
好了,现在可以发布我的发明之一了,物联网App Engine搜索 lucene 之类是不是不流行了?
D3.js JSON data选择 WCF 还是 ASP.NET WebApi
Logstash 啥时候合入 ElasticSearch 的?A question
why int** cannot convert to const int** ?c++的两大威胁
kafka vs fluentd有专门讲 message server performance 的资料吗
ES怎么玩?Celery in Golang and Scala?
scala支持Restful web service的问题对分布式软件的Jepsen测试
关于es的缺点哪个框架最适合快速开发手机app后台的web service?运算量比较
相关话题的讨论汇总
话题: log话题: kafka话题: tp话题: 同一个话题: 00