一、概述
1.1 Kafka概念描述
1)Apache Kafka是一个开源消息系统,由Scala写成。是由Apache软件基金会开发的一个开源消息系统项目。
2)Kafka最初是由LinkedIn公司开发,并于2011年初开源。2012年10月从Apache Incubator毕业。该项目的目标是为处理实时数据提供一个统一、高通量、低等待的平台。
3)Kafka是一个分布式消息队列。Kafka对消息保存时根据Topic进行归类,发送消息者称为Producer,消息接受者称为Consumer,此外kafka集群有多个kafka实例组成,每个实例(server)称为broker。
4)无论是kafka集群,还是consumer都依赖于zookeeper集群保存一些meta信息,来保证系统可用性。
1.2 Kafka集群
Kafka集群由多个Kafka Brokers组成。每个Kafka Broker都有一个唯一的ID(编号)。Kafka Brokers包含主题日志分区,如果希望获得故障处理能力,需要保证至少有三到五个服务器,Kafka集群最大可同时存在10,100或1,000个服务器。
Kafka集群是把状态保存在Zookeeper中的, Zookeeper集群的工作是超过半数才能对外提供服务,最低是三台的配置,3台中超过两台超过半数,允许1台挂掉。
Kafka集群部署也是至少需要3台服务器。此实施文档基于三台服务器来搭建,如图:
资源规划及注意事项
资源项 |
建议 |
注释 |
内存 |
推荐带有64GB RAM的系统,但是32GB的也可以正常使用。少于32GB往往效果不佳。此外,Kafka非常仔细地使用堆空间,不需要将堆大小设置为超过6GB。这将导致32GB的计算机上的文件系统缓存最多28-30GB。 |
32GB或以上 |
CPU |
大多数Kafka部署通常对CPU要求不太严格。这样,处理器的设置比其他资源的重要性要小。但是,如果启用了SSL,则CPU要求可能会更高(确切的详细信息取决于CPU类型和JVM实现)。 最好选择具有多个内核的现代处理器。 如果您需要在更快的CPU或更多核心之间进行选择,请选择更多核心。多核提供的额外并发性将远远超过稍快的时钟速度。 |
多核CPU |
存储 |
建议不要与应用程序日志或其他OS文件系统活动共享用于Kafka数据的相同驱动器,以确保良好的延迟。可以将这些驱动器组合到一个卷(RAID)中,也可以格式化并将每个驱动器安装为自己的目录。由于Kafka具有复制功能,因此RAID提供的冗余也可以在应用程序级别提供。这个选择有几个权衡。 1,如果配置多个数据目录,则代理将在路径中放置一个新分区,该分区中当前存储的分区数最少。每个分区将完全位于数据目录之一中。如果分区之间的数据平衡不佳,则可能导致磁盘之间的负载不平衡。 2,RAID在平衡磁盘之间的负载方面可能会做得更好,因为它可以在较低级别上平衡负载。RAID的主要缺点是减少了可用磁盘空间。RAID的另一个潜在好处是可以容忍磁盘故障。不建议使用RAID5或RAID6,因为会严重影响写入吞吐量,并且在较小程度上会降低磁盘故障时重建阵列的I / O成本(通常,重建成本适用于RAID,但是对于RAID6和RAID 5而言最糟糕)。 3,如果可以接受额外费用,则应使用RAID10。否则,请为您的Kafka服务器配置多个日志目录,每个目录都安装在单独的驱动器上。 4,应该避免使用网络附加存储(NAS)。NAS通常速度较慢,延迟较大,平均延迟偏差较大,并且是单点故障。 5,磁盘吞吐量(IOPS 每秒的读写次数)会影响生产者的性能。因为生产者的消息必须被提交到服务器保存,大多数的客户端都会一直等待,直到至少有一个服务器确认消息已经成功提交为止。也就是说,磁盘写入速度越快,生成消息的延迟就越低。 |
建议单独的存储,大小根据数据量而定,建议500GB, |
网络 |
快速可靠的网络是分布式系统中必不可少的性能组件。低延迟确保节点可以轻松通信,而高带宽则有助于分片移动和恢复。现代数据中心网络(1 GbE,10 GbE)足以满足绝大多数群集的需求。 当然网络吞吐量决定了Kafka能够处理的最大数据流量。它和磁盘是制约Kafka拓展规模的主要因素。对于生产者、消费者写入数据和读取数据都要瓜分网络流量。同时做集群复制也非常消耗网络。 |
建议1GB及以上 |
文件系统 |
Kafka对文件系统没有特别的要求。常规的XFS, ext4, NTFS都可以运行Kafka。 |
Ext4 或者NTFS |
服务器规划
主机名及IP规划
服务器名 |
IP |
注释 |
prdserver1 |
192.168.88.115 |
Zookeeper server1 Kafka server1 |
prdserver2 |
192.168.88.117 |
Zookeeper server2 Kafka server2 |
prdserver3 |
192.168.88.119 |
Zookeeper server3 Kafka server3 |
操作系统没有特别的要求,建议选用Linux较高版本,以减少触发Bug的几率。
操作系统版本 |
Red Hat Enterprise Linux Server release 7.5 (Maipo) |
项目 |
目录 |
权限 |
Zookeeper |
/opt/zookeeper/ |
|
kafka |
/opt/kafka |
|
组 |
用户 |
说明 |
zk |
zk |
zookeeper安装用户组 |
kafka |
kafka |
kafka安装用户组 |
三 安装
Zookeeper集群的安装
由于选择的三台服务器作为zookeeper集群,因此接下来的安装步骤需要同时在三台服务器上执行。
JDK安装及基础环境准备
版本说明
从安全角度考虑,建议使用JDK 1.8的最新发行版,因为较早的免费版本已披露了安全漏洞。LinkedIn当前正在使用G1收集器运行JDK 1.8 u5(希望升级到较新版本)。LinkedIn的调整如下所示:
-Xmx6g -Xms6g -XX:MetaspaceSize=96m -XX:+UseG1GC
-XX:MaxGCPauseMillis=20 -XX:InitiatingHeapOccupancyPercent=35 -XX:G1HeapRegionSize=16M
-XX:MinMetaspaceFreeRatio=50 -XX:MaxMetaspaceFreeRatio=80
JDK下载及安装
jdk下载地址:
https://www.oracle.com/java/technologies/javase-downloads.html
#mkdir -p /usr/java
#mv /tmp/jdk-8u241-linux-x64.tar /usr/java
#tar -zxvf jdk-8u241-linux-x64.tar
#cd /usr/java/jdk1.8.0_241
#ls -l
total 25988
drwxr-xr-x. 2 10143 10143 4096 Dec 11 18:35 bin
-r--r--r--. 1 10143 10143 3244 Dec 11 18:35 COPYRIGHT
drwxr-xr-x. 3 10143 10143 132 Dec 11 18:35 include
-rw-r--r--. 1 10143 10143 5217333 Dec 11 15:41 javafx-src.zip
drwxr-xr-x. 5 10143 10143 185 Dec 11 18:35 jre
drwxr-xr-x. 5 10143 10143 245 Dec 11 18:35 lib
-r--r--r--. 1 10143 10143 44 Dec 11 18:35 LICENSE
drwxr-xr-x. 4 10143 10143 47 Dec 11 18:35 man
-r--r--r--. 1 10143 10143 159 Dec 11 18:35 README.html
-rw-r--r--. 1 10143 10143 424 Dec 11 18:35 release
-rw-r--r--. 1 10143 10143 21078837 Dec 11 18:35 src.zip
-rw-r--r--. 1 10143 10143 116400 Dec 11 15:41 THIRDPARTYLICENSEREADME-JAVAFX.txt
-r--r--r--. 1 10143 10143 169788 Dec 11 18:35 THIRDPARTYLICENSEREADME.txt
JDK环境变量配置
jdk部署目录 |
shell |
说明 |
/usr/java/jdk1.8.0_241 |
vi /etc/profile 末尾添加 JAVA_HOME=/usr/java/jdk1.8.0_241 CLASSPATH=.:${JAVA_HOME}/lib/dt.jar:${JAVA_HOME}/lib/tools.jar PATH=$PATH:${JAVA_HOME}/bin export JAVA_HOME CLASSPATH PATH 保存退出 source /etc/profile |
若客户无特别说明,则jdk部署在/usr/java下(若无目录请创建)。 Jdk配置也可单独部署在zookeeper及kafka实施用户下,修改<user_home>/.bash_profile添加相同内容即可。 |
查看JDK版本
# java -version |