Centos7 搭建Kafka集群

1. 准备

#安装Java运行环境JRE,下载Server Jre上传到tmp目录
mkdir /usr/java;\
tar xf /tmp/server-jre-8u181-linux-x64.tar.gz -C /usr/java;\
ln -s /usr/java/jdk1.8.0_181 /usr/java/default;\
tee -a /etc/profile << 'EOF'
export JAVA_HOME=/usr/java/default
export PATH=$JAVA_HOME/bin:$PATH
EOF

#生效环境变量
source /etc/profile

#下载部署包
wget -c -P /tmp/ https://mirrors.tuna.tsinghua.edu.cn/apache/kafka/1.1.1/kafka_2.11-1.1.1.tgz;\
mkdir /opt/kafka;\
tar xf /tmp/kafka_2.11-1.1.1.tgz -C /opt/kafka

#添加用户及目录
useradd -s /sbin/nologin kafka;\
mkdir -p /home/kafka/data/kafka /home/kafka/data/zookeeper

2. Zookeeper

2.1 配置zookeeper.properties

mv /opt/kafka/kafka_2.11-1.1.1/config/zookeeper.properties /opt/kafka/kafka_2.11-1.1.1/config/zookeeper.properties_bak;\
tee /opt/kafka/kafka_2.11-1.1.1/config/zookeeper.properties << 'EOF'
#数据目录,不建议放到程序内,因为更新到时候容易丢,应该放在统一到数据目录
dataDir=/home/kafka/data/zookeeper

#zookeeper中使用的基本时间单位, 毫秒值
tickTime=2000

#这个配置项是用来配置 Zookeeper 接受客户端(这里所说的客户端不是用户连接 Zookeeper 服务器的客户端,而是 Zookeeper 服务器集群中连接到 Leader 的 Follower 服务器)初始化连接时最长能忍受多少个 tickTime 时间间隔数。这里设置为5表名最长容忍时间为 5 * 2000 = 10 秒
initLimit=10

#这个配置标识 Leader 与 Follower 之间发送消息,请求和应答时间长度,最长不能超过多少个 tickTime 的时间长度,总的时间长度就是 5 * 2000 = 10秒
syncLimit=5

#客户端连接的端口
clientPort=2181

#每个IP最大客户端连接数,0表示关闭限制
maxClientCnxns=1000

#节点信息
server.41=192.168.1.41:2888:3888
server.42=192.168.1.42:2888:3888
server.43=192.168.1.43:2888:3888
EOF

2.2 配置myid

#zookeeper node-1
echo "41"  > /home/kafka/data/zookeeper/myid

#zookeper node-2
echo "42"  > /home/kafka/data/zookeeper/myid

#zookeeper node-3
echo "43"  > /home/kafka/data/zookeeper/myid

2.3 添加Systemd服务

tee /etc/systemd/system/zookeeper.service << 'EOF'
[Unit] 
Description=Apache Zookeeper server (Kafka) 
Documentation=http://zookeeper.apache.org 
Requires=network.target remote-fs.target  
After=network.target remote-fs.target 
[Service] 
Type=simple 
User=kafka 
Group=kafka 
Environment=JAVA_HOME=/usr/java/default 
ExecStart=/opt/kafka/kafka_2.11-1.1.1/bin/zookeeper-server-start.sh /opt/kafka/kafka_2.11-1.1.1/config/zookeeper.properties 
ExecStop=/opt/kafka/kafka_2.11-1.1.1/bin/zookeeper-server-stop.sh 
[Install] 
WantedBy=multi-user.target
EOF

2.4 启动

chown -R kafka. /home/kafka/data /opt/kafka;\
systemctl daemon-reload;\
systemctl enable zookeeper;\
systemctl start zookeeper;\
systemctl status zookeeper

2.5 打开防火墙

firewall-cmd --add-port=2181/tcp --permanent;\
firewall-cmd --add-port=2888/tcp --permanent;\
firewall-cmd --add-port=3888/tcp --permanent;\
firewall-cmd --reload

2.6 查看

/opt/kafka/kafka_2.11-1.1.1/bin/zookeeper-shell.sh 192.168.1.41:2181

使用参考:https://my.oschina.net/tongyufu/blog/1806196

3. Kafka

3.1 配置server.properties

mv /opt/kafka/kafka_2.11-1.1.1/config/server.properties /opt/kafka/kafka_2.11-1.1.1/config/server.properties_bak;\
tee /opt/kafka/kafka_2.11-1.1.1/config/server.properties << 'EOF'
#非负整数,用于唯一标识broker,不同节点该值必须不一样,比如 1,2,3
broker.id=41

# broker 发布给生产者消费者的hostname,会存储在zookeeper。配置好这个host可以实现内网外网同时访问。
listeners=PLAINTEXT://192.168.1.41:9092

#borker进行网络处理的线程数
num.network.threads=3

#borker进行I/O处理的线程数
num.io.threads=8

#发送缓冲区buffer大小,数据不是一下子就发送的,先回存储到缓冲区了到达一定的大小后在发送,能提高性能
socket.send.buffer.bytes=102400

#kafka接收缓冲区大小,当数据到达一定大小后在序列化到磁盘
socket.receive.buffer.bytes=102400

#这个参数是向kafka请求消息或者向kafka发送消息的请请求的最大数,这个值不能超过java的堆栈大小
socket.request.max.bytes=104857600

#kafka存放消息的目录
log.dirs=/home/kafka/data/kafka/kafka-logs

#每个topic默认partition数量,根据消费者实际情况配置,配置过小会影响消费性能
num.partitions=30

# kafka启动恢复日志,关闭前日志刷盘的线程数,如果是raid的盘的话适当增加,比如3
num.recovery.threads.per.data.dir=2

#是否允许删除topic,开发环境应该是true,测试及生产环境应该是false
delete.topic.enable=true

#每个topic的副本数量,默认为1,生产最好3个以上
offsets.topic.replication.factor=3

transaction.state.log.replication.factor=1
transaction.state.log.min.isr=1


#日志刷盘机制默认,10000条刷一次,1秒刷一次
#log.flush.interval.messages=10000
#log.flush.interval.ms=1000

#日志保留时间,默认为7天,如果量大,可以酌情改小,比如三天
log.retention.hours=168

#日志保留大小,默认是保留1G,生产上可以配置为下面50G
log.retention.bytes=53687091200

#The interval at which log segments are checked to see if they can be deleted according
# to the retention policies
log.retention.check.interval.ms=300000

#Zookeeper host和port ,这个看zookeeper环境而设置
zookeeper.connect=192.168.1.41:2181,192.168.1.42:2181,192.168.1.43:2181

#Zokeeper 连接超时时间
zookeeper.connection.timeout.ms=6000

#是让coordinator推迟空消费组接收到成员加入请求后本应立即开启的rebalance。在实际使用时,假设你预估你的所有consumer组成员加入需要在10s内完成,那么你就可以设置该参数10000
group.initial.rebalance.delay.ms=10000

EOF

3.2 server.properties分节点特殊配置

#kafka node-1
sed -i '/broker.id=/c\broker.id=41' /opt/kafka/kafka_2.11-1.1.1/config/server.properties;\
sed -i '/listeners=/c\listeners=PLAINTEXT://192.168.1.41:9092' /opt/kafka/kafka_2.11-1.1.1/config/server.properties

#kafka node-2
sed -i '/broker.id=/c\broker.id=42' /opt/kafka/kafka_2.11-1.1.1/config/server.properties;\
sed -i '/listeners=/c\listeners=PLAINTEXT://192.168.1.42:9092' /opt/kafka/kafka_2.11-1.1.1/config/server.properties

#kafka node-3
sed -i '/broker.id=/c\broker.id=43' /opt/kafka/kafka_2.11-1.1.1/config/server.properties;\
sed -i '/listeners=/c\listeners=PLAINTEXT://192.168.1.43:9092' /opt/kafka/kafka_2.11-1.1.1/config/server.properties

3.3 添加Systemd服务

tee /etc/systemd/system/kafka.service << 'EOF'
[Unit] 
Description=Apache Kafka server (broker) 
Documentation=http://kafka.apache.org/documentation.html 
Requires=network.target remote-fs.target  
After=network.target remote-fs.target zookeeper.service 
[Service] 
Type=simple 
User=kafka 
Group=kafka 
Environment=JAVA_HOME=/usr/java/default 
ExecStart=/opt/kafka/kafka_2.11-1.1.1/bin/kafka-server-start.sh /opt/kafka/kafka_2.11-1.1.1/config/server.properties 
ExecStop=/opt/kafka/kafka_2.11-1.1.1/bin/kafka-server-stop.sh 
[Install] 
WantedBy=multi-user.target

EOF

3.4 启动

chown -R kafka. /home/kafka/data /opt/kafka;\
systemctl daemon-reload;\
systemctl enable kafka;\
systemctl start kafka;\
systemctl status kafka

3.5 防火墙

firewall-cmd --add-port=9092/tcp --permanent;\
firewall-cmd --reload

3.6 查看


#查看topic
/opt/kafka/kafka_2.11-1.1.1/bin/kafka-topics.sh --zookeeper 127.0.0.1:2181 --list

#创建topic
/opt/kafka/kafka_2.11-1.1.1/bin/kafka-topics.sh --zookeeper 127.0.0.1:2181 --create --replication-factor 1 --partitions 1 --topic test

#删除topic
/opt/kafka/kafka_2.11-1.1.1/bin/kafka-topics.sh --zookeeper 127.0.0.1:2181 --delete --topic test
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,324评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,356评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,328评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,147评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,160评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,115评论 1 296
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,025评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,867评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,307评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,528评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,688评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,409评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,001评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,657评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,811评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,685评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,573评论 2 353

推荐阅读更多精彩内容