概述

Kafka是最初由Linkedin公司开发,是一个分布式、分区的、多副本的、多订阅者,基于zookeeper协调的分布式日志系统(也可以当做MQ系统),常见可以用于web/nginx日志、访问日志,消息服务等等,Linkedin于2010年贡献给了Apache基金会并成为顶级开源项目。
主要应用场景是:日志收集系统和消息系统。

Kafka主要设计目标如下:

以时间复杂度为O(1)的方式提供消息持久化能力,即使对TB级以上数据也能保证常数时间的访问性能。
高吞吐率。即使在非常廉价的商用机器上也能做到单机支持每秒100K条消息的传输。
支持Kafka Server间的消息分区,及分布式消费,同时保证每个partition内的消息顺序传输。
同时支持离线数据处理和实时数据处理。
Scale out:支持在线水平扩展

系统更新

1
2
3
sudo add-apt-repository ppa:openjdk-r/ppa
sudo apt-get update
sudo apt-get install openjdk-8-jdk

安装 zookeeper

1
2
3
4
5
6
7
wget http://apache.fayea.com/zookeeper/zookeeper-3.4.10/zookeeper-3.4.10.tar.gz

tar xf zookeeper-3.4.10.tar.gz -C /usr/local
cd /usr/local/zookeeper-3.4.10/conf
cp -pv zoo_sample.cfg zoo.cfg
vim /usr/local/zookeeper/conf/zoo.cfg
mkdir -p /data/zookeeper

安装 kafka

1
2
3
4
5
6
7
wget http://www-eu.apache.org/dist/kafka/0.10.2.1/kafka_2.12-0.10.2.1.tgz
tar xf kafka_2.12-0.10.2.1.tgz -C /usr/local
cd /usr/local && ln -s kafka_2.12-0.10.2.1 kafka

vim /usr/local/kafka/config/server.properties

nohup bin/kafka-server-start.sh config/server.properties &

安装 supervisor 守护进程

1
2
3
4
5
6
7
8
9
10
python get-pip.py 
pip install setuptools
pip install -U setuptools
pip install supervisor
echo_supervisord_conf > /etc/supervisord.conf
mkdir /etc/supervisor
sed -i 's#\;\[include\]#\[include\]#' /etc/supervisord.conf
sed -i '/relative\/directory/a\files = /etc/supervisor/*.ini' /etc/supervisord.conf
mkdir /data/httplogs
supervisord -c /etc/supervisord.conf

kafka 启动

1
2
./kafka-console-producer.sh --broker-list 10.10.32.92:9092  --topic log
./kafka-topics.sh --create --zookeeper 10.10.32.92:2181 --replication-factor 1 --partitions 1 --topic log

swap 关闭

1
2
3
echo "vm.swappiness = 1" >> /etc/sysctl.conf
sysctl vm.swappiness=1
swapoff -a && swapon -a

安装 elasticsearch

1
2
3
4
5
6
7
8
9
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
sudo apt-get install apt-transport-http
echo "deb https://artifacts.elastic.co/packages/5.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-5.x.list
sudo apt-get update && sudo apt-get install elasticsearch
cp -pv /etc/elasticsearch/elasticsearch.yml{,.default}
vim /etc/elasticsearch/elasticsearch.yml
mkdir -m 755 -p /data/elasticsearch/{elasticsearch_logs,elasticsearch_data}
chown -R elasticsearch:elasticsearch /data/elasticsearch
/etc/init.d/elasticsearch start

安装 node

1
2
3
4
5
wget https://nodejs.org/dist/v6.11.2/node-v6.11.2-linux-x64.tar.xz
tar xvf node-v6.11.2-linux-x64.tar.xz
mv node-v6.11.2-linux-x64 /usr/local/
cd /usr/local/ && ln -s node-v6.11.2-linux-x64/ node
chown root:root -R node-v6.11.2-linux-x64/