logstash的kafka插件使用
前言
关于logstash可以产看其 官网 ,对于英文有障碍的人士,或是想知道更多插件使用技巧的用户请移步 @三斗室 所著作 logstash最佳实战 ,本片内容已经并入其中相关章节.
Logstash-kafka简介
https://github.com/joekiller/logstash-kafka
logstash 1.4相关版本
插件本身内容非常简单,其主要依赖同一作者写的 jruby-kafka 模块。需要注意的是: 该模块仅支持 Kafka-0.8 版本。如果是使用 0.7 版本 kafka 的,将无法直接使 jruby-kafka 该模块和 logstash-kafka 插件。
安装
- 安装按照官方文档完全自动化的安装.或是可以通过以下方式手动自己安装插件,不过重点注意的是 kafka 的版本 ,上面已经指出了。
./logstash-1.4.0
- 下载 kafka 相关组件,以下示例选的为 kafka_2.8.0-0.8.1.1-src ,并解压重命名为./kafka_2.8.0-0.8.1.1
- 下载 logstash-kafka v0.4.2 从 releases ,并解压重命名为
./logstash-kafka-0.4.2
./kafka_2.8.0-0.8.1.1/libs
- 目录下复制所有的 jar 文件拷贝到
./logstash-1.4.0/vendor/jar/kafka_2.8.0-0.8.1.1/libs
下,其中你需要创建kafka_2.8.0-0.8.1.1/libs
./logstash-kafka-0.4.2/logstash
- 里的
inputs
和outputs
下的kafka.rb
,拷贝到对应的./logstash-1.4.0/lib/logstash
里的inputs
和outputs
./logstash-1.4.0
- 目录下,现在需要运行 logstash-kafka 的 gembag.rb 脚本去安装 jruby-kafka 库,执行以下命令:
GEM_HOME=vendor/bundle/jruby/1.9 GEM_PATH= java -jar vendor/jar/jruby-complete-1.7.11.jar --1.9 ../logstash-kafka-0.4.2/gembag.rb ../logstash-kafka-0.4.2/logstash-kafka.gemspec
。
bin/logstash agent -f logstash.conf
Input 配置示例
以下配置可以实现对 kafka 读取端(consumer)的基本使用。
消费端更多详细的配置请查看http://kafka.apache.org/documentation.html#consumerconfigs kafka 官方文档的消费者部分配置文档。
input {
kafka {
zk_connect => "localhost:2181"
group_id => "logstash"
topic_id => "test"
reset_beginning => false # boolean (optional), default: false
consumer_threads => 5 # number (optional), default: 1
decorate_events => true # boolean (optional), default: false
}
}
Input 解释
消费端的一些比较有用的配置项:
- group_id
消费者分组,可以通过组 ID 去指定,不同的组之间消费是相互不受影响的,相互隔离。
- topic_id
topic
- reset_beginning
cat
,但是读到最后一行不会终止,而是变成 tail -F
- decorate_events
在输出消息的时候会输出自身的信息包括:消费消息的大小, topic 来源以及 consumer 的 group 信息。
- rebalance_max_retries
reblance
,此后将会有partitions
的消费端迁移到新的 consumer
上,如果一个 consumer
获得了某个partition
的消费权限,那么它将会向 zookeeper
注册, Partition Owner registry
节点信息,但是有可能此时旧的 consumer
- consumer_timeout_ms
指定时间内没有消息到达就抛出异常,一般不需要改。
以上是相对重要参数的使用示例,更多参数可以选项可以跟据https://github.com/joekiller/logstash-kafka/blob/master/README.md 查看 input 默认参数。
注意
topic
的话,那么需要把两个或是多个 logstash 消费端配置成相同的 group_id
和 topic_id
, 但是前提是要把 相应的 topic 分多个 partitions (区)
partitions(区) , kafka 的消息模型是对 topic 分区以达到分布式效果。每个 topic
下的不同的 partitions (区) 只能有一个 Owner 去消费。所以只有多个分区后才能启动多个消费者,对应不同的区去消费。其中协调消费部分是由 server 端协调而成。不必使用者考虑太多。只是 消息的消费则是无序的
partition
Output 配置
以下配置可以实现对 kafka 写入端 (producer) 的基本使用。
生产端更多详细的配置请查看http://kafka.apache.org/documentation.html#producerconfigs kafka 官方文档的生产者部分配置文档。
output {
kafka {
broker_list => "localhost:9092"
topic_id => "test"
compression_codec => "snappy" # string (optional), one of ["none", "gzip", "snappy"], default: "none"
}
}
Output 解释
生产的可设置性还是很多的,设置其实更多,以下是更多的设置:
- compression_codec
消息的压缩模式,默认是 none,可以有 gzip 和 snappy (暂时还未测试开启压缩与不开启的性能,数据传输大小等对比)。
- compressed_topics
topic
,表示此 topic
- request_required_acks
消息的确认模式:
可以设置为 0: 生产者不等待 broker 的回应,只管发送.会有最低能的延迟和最差的保证性(在服务器失败后会导致信息丢失)
可以设置为 1: 生产者会收到 leader 的回应在 leader 写入之后.(在当前 leader 服务器为复制前失败可能会导致信息丢失)
可以设置为 -1: 生产者会收到 leader 的回应在全部拷贝完成之后。
- partitioner_class
分区的策略,默认是 hash 取模
- send_buffer_bytes
socket 的缓存大小设置,其实就是缓冲区的大小
消息模式相关
- serializer_class
key_serializer_class
- key_serializer_class
serializer_class
- producer_type
async
异步执行消息的发送 sync
- queue_buffering_max_ms
异步模式下,那么就会在设置的时间缓存消息,并一次性发送
- queue_buffering_max_messages
异步的模式下,最长等待的消息数
- queue_enqueue_timeout_ms
异步模式下,进入队列的等待时间,若是设置为0,那么要么进入队列,要么直接抛弃
- batch_num_messages
queue_buffering_max_messages
或是 queue_enqueue_timeout_ms
以上是相对重要参数的使用示例,更多参数可以选项可以跟据https://github.com/joekiller/logstash-kafka/blob/master/README.md 查看 output 默认参数。
小贴士
默认情况下,插件是使用 json 编码来输入和输出相应的消息,消息传递过程中 logstash 默认会为消息编码内加入相应的时间戳和 hostname 等信息。如果不想要以上信息(一般做消息转发的情况下),可以使用以下配置,例如:
output {
kafka {
codec => plain {
format => "%{message}"
}
}
}