Kafka是linkedin用于日志处理的分布式消息队列,linkedin的日志数据容量大,但对可靠性要求不高,其日志数据主要包括用户行为(登录、浏览、点击、分享、喜欢)以及系统运行日志(CPU、内存、磁盘、网络、系统及进程状态)。参考:http://blog.chinaunix.net/uid-20196318-id-2420884.html
一、环境准备
1. 2台zookeeper集群 192.168.36.127:2181,192.168.36.91:2181 参考:http://blog.youkuaiyun.com/zhu_tianwei/article/details/40685251
2.3台kafka集群机器:192.168.36.91 192.168.36.127 192.168.36.136 创建用户kafka,并安装java
如下安装一台机器为例
二、下载安装
1. 下载 wget http://mirrors.cnnic.cn/apache/kafka/0.8.1.1/kafka_2.10-0.8.1.1.tgz
2.解压 tar -zxvf kafka_2.10-0.8.1.1.tgz
三、配置
1.在/home/kafka/kafka_2.10-0.8.1.1目录下创建kafka存放消息文件的路径
mkdir data
2.修改配置文件config/server.properties
broker.id=91
port=9092
host.name=192.168.36.91
advertised.host.name=192.168.36.91
advertised.port=9092
num.network.threads=3
num.io.threads=8
socket.send.buffer.bytes=1048576
socket.receive.buffer.bytes=1048576
socket.request.max.bytes=104857600
log.dirs=/home/kafka/kafka_2.10-0.8.1.1/data
num.partitions=6
log.retention.hours=168
log.segment.bytes=536870912
log.retention.check.interval.ms=60000
log.cleaner.enable=false
zookeeper.connect=192.168.36.127:2181,192.168.36.91:2181
zookeeper.connection.timeout.ms=10000
broker.id节点的唯一标识
配置说明:
broker.id 整数,建议根据ip区分 ,必须项
log.dirs kafka存放消息文件的路径,默认/tmp/kafka-logs,必须项
port broker用于接收producer消息的端口
advertised.host.name 暴露在zk中的服务地址
advertised.port 暴露在zk中的服务端口
zookeeper.connnect zookeeper连接格式为 ip1:port,ip2:port,ip3:port ,必须项
message.max.bytes 单条消息的最大长度
num.network.threadsbroker 用于处理网络请求的线程数,如不配置默认为3,server.properties默认是2
num.io.threadsbroker 用于执行网络请求的IO线程数,如不配置默认为8,server.properties默认是2可适当增大,
queued.max.requests 排队等候IO线程执行的requests,默认为500
host.name broker的hostname 默认null,建议写主机的ip,不然消费端不配置hosts会有麻烦
num.partitions topic的默认分区数,默认1
log.retention.hours 消息被删除前保存多少小时,默认1周168小时
auto.create.topics.enable 是否可以程序自动创建Topic,默认true,建议false
default.replication.factor 消息备份数目,默认1不做复制,建议修改
num.replica.fetchers 用于复制leader消息到follower的IO线程数.默认1
四、启动
JMX_PORT=9999 nohup bin/kafka-server-start.sh config/server.properties >/dev/null 2>&1 &
JMX_PORT=9999 做监控使用
五、检查
1、创建topic并查看
./bin/kafka-topics.sh --create --zookeeper 192.168.36.127:2181,192.168.36.91:2181 --replication-factor 3 --partitions 1 --topic demo_test
Created topic "demo_test".
./bin/kafka-topics.sh --list --zookeeper 192.168.36.127:2181,192.168.36.91:2181
demo_test
./bin/kafka-topics.sh --describe --zookeeper 192.168.36.127:2181,192.168.36.91:2181
Topic:3test PartitionCount:1 ReplicationFactor:3 Configs:
Topic: 3test Partition: 0 Leader: 127 Replicas: 136,91,127 Isr: 127,91,136
Topic:demo_test PartitionCount:1 ReplicationFactor:3 Configs:
Topic: demo_test Partition: 0 Leader: 127 Replicas: 127,91,136 Isr: 127,91,136
2.启动consumer & producer,并在producer启动后的console输入一些信息
在一台机子上启动生产者:
./bin/kafka-console-producer.sh --broker-list 192.168.36.91:9092,192.168.36.127:9092,192.168.36.136:9092 --topic demo_test
在另一台机子上启动消费者:
./bin/kafka-console-consumer.sh --zookeeper 192.168.36.127:2181,192.168.36.91:2181 --from-beginning --topic demo_test
在生产者输入字符串,回车,消费者立即收到消息。
注意事项:
1.kafka会用到hostname,所以 需要修改操作系统的hostname,否者后面执行kafka的shell命令时会报 unknownhostname的异常
centos的hostname修改方式:
root权限修改
修改/etc/hosts,增加:192.168.36.91 zhutianwei
修改/etc/sysconfig/network,HOSTNAME=zhutianwei
2.jvm参数中-XX标识的是实验性参数,kafka用了很多用来优化运行的jvm参数,而你安装的 jdk所带的jvm不一定支持这些参数,比如: -XX:+UseCompressedOops
如果你遇到Unrecognized VM option '+UseCompressedOops'的错误,请在bin/kafka-run-class.sh中移除相关参数
其他参考官方文档:http://kafka.apache.org/documentation.html
java实例代码参考:http://download.youkuaiyun.com/detail/tianwei7518/8112121