最近一段时间,在尝试使用heka读取本机的日志文件,向kafka集群发送日志消息
具体的方式是,kafka使用单broker用来功能验证,heka使用自带的kafka插件,hekad的配置如下
[LogstreamerInput]
log_directory = "/data1/www/logs"
file_match = 'recom\.i\.weibo\.com-access_log'
[PayloadEncoder]
append_newlines = false
[FxaKafkaOutput]
type = "KafkaOutput"
message_matcher = "TRUE"
topic = "recom_i"
addrs = ["10.75.5.27:9092"]
encoder = "PayloadEncoder"
启动hekad,hekad -config="/etc/hekad.toml"
会报错,说连不上broker,而broker这个时候明明是好的,看了一下heka的kafka这个plugin的code,其实配置里addrs这个数组是直接传给了kafka的golang客户端sarama,因此转而看了看sarama的客户端,恍然大悟,原来在heka和broker开始建立通信的时候使用ip是没有问题的,但是sarama里面是通过broker去访问kafka依赖的zookeeper,进而从zookeeper里的metadata里面获取到了10.75.5.27这个机器的host是talus27,在接下来的向kafka的broker发布消息的通信中,由于无法解析talus27这个hostname而报发送失败
解决的办法很简单,在heka的机器的/etc/hosts文件中添加一行
10.75.5.27 talus27
就搞定了~