企业上云培训二---zookeeper3.4.14和kafka2.11-1.0安装配置调优

      本次需要完成的任务在上一篇博客的基础上持续添加软件zookeeper和kafka,指定zookeeper的端口为12181,kafka端口为19092,新建一个kafka的topic:audit,设置该topic分区数量为2,最后设置kafka的日志最大留存时间为48小时,kafka分区最大留存大小为2Gb。

一、zookeeper 简单介绍

     Apache ZooKeeperApache软件基金会的一个软件项目,它为大型分布式计算提供开源的分布式配置服务、同步服务和命名注册。ZooKeeper曾经是Hadoop的一个子项目,但现在是一个独立的顶级项目。Apache ZooKeeper是一种开源软件,可实现弹性和高度可靠的分布式协调。它通常用于分布式系统中,以管理配置信息,命名服务,分布式同步,仲裁和状态。此外,分布式系统依靠ZooKeeper来实现共识,领导者选举和组管理。

    ZooKeeper的架构通过冗余服务实现高可用性。因此,如果第一次无应答,客户端就可以询问另一台ZooKeeper主机。ZooKeeper节点将它们的数据存储于一个分层的命名空间,非常类似于一个文件系统或一个前缀树结构。客户端可以在节点读写,从而以这种方式拥有一个共享的配置服务。

   ZooKeeper在Java中运行,版本1.6或更高版本(JDK 6或更高版本)。它作为ZooKeeper服务器的集合运行。三个ZooKeeper服务器是整体的最小建议大小,ZooKeeper通常部署在专用的RHEL上,具有双核处理器,2GB RAM和80GB硬盘。ZooKeeper在生产环境中通常采用集群部署,集群数量使用奇数个机器,例如,使用四台机器,ZooKeeper只能处理单台机器的故障; 如果两台机器出现故障,其余两台机器不会占多数。但是,有了五台机器,ZooKeeper可以处理两台机器的故障。

 二、zookeeper安装步骤

    本项目用于开发测试,所以安装采用单机独立模式,在独立模式下设置ZooKeeper服务器非常简单。服务器包含在单个JAR文件中,因此安装包括创建配置。下载一个稳定的ZooKeeper版本,将其解压缩到指定目录下以root身份进入目录后完成安装配置工作。

   1、安装jdk环境

创建java安装目录,并将jdk包解压缩到安装目录

mkdir /usr/local/java && tar xvf /home/app/jdk-8u181-linux-x64.tar.gz -C /usr/local/java

配置/etc/profile文件,在最后添加下面的配置变量

export JAVA_HOME=/usr/local/java/jdk1.8.0_181
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib/dt.jar:${JAVA_HOME}/lib/tools.jar:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:${PATH}

当前环境引用环境变量

source /etc/profile

检验java环境安装效果

  2、创建zookeeper安装目录并将zookeeper打包文件解压缩到指定目录

mkdir /usr/local/zk && tar xvf /home/app/zookeeper-3.4.14.tar.gz -C /usr/local/zk

3、创建zookeeper的配置文件,修改zookeeper启动端口为12181

cp zoo_sample.cfg zoo.cfg && vi zoo.cfg

conf/zoo.cfg:

tickTime=2000
dataDir=/var/zookeeper
clientPort=12181

tickTime

ZooKeeper使用的基本时间单位(以毫秒为单位)。它用于做心跳,最小会话超时将是tickTime的两倍。

DATADIR

存储内存数据库快照的位置,除非另有说明,否则指向数据库更新的事务日志。

CLIENTPORT

侦听客户端连接的端口

 4、启动单节点zookeeper

bin/zkServer.sh start

5、检验zookeeper配置

jps -V && netstat -ntlp | grep 12181

使用zookeeper客户端登陆12181测试

bin/zkCli.sh -server localhost:12181

三、kafka简单介绍

      Kafka是由Apache软件基金会开发的一个开源流处理平台,由ScalaJava编写。该项目的目标是为处理实时数据提供一个统一、高吞吐、低延迟的平台。其持久化层本质上是一个“按照分布式事务日志架构的大规模发布/订阅消息队列”,[3]这使它作为企业级基础设施来处理流式数据非常有价值。此外,Kafka可以通过Kafka Connect连接到外部系统(用于数据输入/输出),并提供了Kafka Streams——一个Java流式处理

kafka架构图

Kafka架构的主要术语包括Topic、Record和Broker。Topic由Record组成,Record持有不同的信息,而Broker则负责复制消息

  • Kafka作为一个集群运行在一个或多个可跨多个数据中心的服务器上。
  • Kafka集群以称为主题的类别存储记录流。
  • 每条记录由一个键,一个值和一个时间戳组成。
  • Topic 用来对消息进行分类,每个进入到Kafka的信息都会被放到一个Topic下
  • Broker 用来实现数据存储的主机服务器
  • Partition 每个Topic中的消息会被分为若干个Partition,以提高消息的处理效率
  • Producer 消息的生产者
  • Consumer 消息的消费者
  • Consumer Group 消息的消费群组

 Kafka有四个主要API:

  • 生产者API:支持应用程序发布Record流。
  • 消费者API:支持应用程序订阅Topic和处理Record流。
  • Stream API:将输入流转换为输出流,并产生结果。
  • Connector API:执行可重用的生产者和消费者API,可将Topic链接到现有应用程序。

Kafka存储的消息来自任意多被称为“生产者”(Producer)的进程。数据从而可以被分配到不同的“分区”(Partition)、不同的“Topic”下。在一个分区内,这些消息被索引并连同时间戳存储在一起。其它被称为“消费者”(Consumer)的进程可以从分区查询消息。Kafka运行在一个由一台或多台服务器组成的集群上,并且分区可以跨集群结点分布。

四、kafka安装步骤

1、解压缩kafka安装文件到指定安装目录下

tar -xvzf /home/app/kafka_2.11-1.0.0.tgz -C /usr/local/

2、进入kafka安装目录修改config目录下的server.properties文件配置

cd /usr/local/kafka_2.11-1.0.0

sed 's/zookeeper.connect=localhost:2181/zookeeper.connect=localhost:12181/g' -i config/server.properties

vi config/server.properties

listeners=PLAINTEXT://:19092

kafka默认监听端口为9092,根据项目要求需要手工修改为19092,kafka需要zookeeper配合,由于前面的zookeeper监听端口修改为12181,所以也需要把kafka配置文件中zookeeper相关端口修改为12181。

3、修改kafka最大日志留存时间为48小时,分区最大留存大小为2G

sed 's/log.retention.hours=168/log.retention.hours=48/g' -i config/server.properties 

sed 's/#log.retention.bytes=1073741824/log.retention.bytes=2147483648/g' -i config/server.properties

4、启动kafka服务器

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

5、验证kafka启动端口

 jps -V && netstat -ntlp | grep 19092

发现kafka启动的进程号一致即可证明kafka启动监听端口为19092

6、创建消息主题audit,设置2个分区

bin/kafka-topics.sh --create --zookeeper localhost:12181 --replication-factor 1 --partitions 2 --topic audit

Created topic "audit".
[2019-08-07 21:59:37,043] INFO [ReplicaFetcherManager on broker 0] Removed fetcher for partitions audit-1,audit-0 (kafka.server.ReplicaFetcherManager)
[2019-08-07 21:59:37,116] INFO Loading producer state from offset 0 for partition audit-1 with message format version 2 (kafka.log.Log)
[2019-08-07 21:59:37,128] INFO Completed load of log audit-1 with 1 log segments, log start offset 0 and log end offset 0 in 40 ms (kafka.log.Log)
[2019-08-07 21:59:37,133] INFO Created log for partition [audit,1] in /tmp/kafka-logs with properties {compression.type -> producer, message.format.version -> 1.0-IV0, file.delete.delay.ms -> 60000, max.message.bytes -> 1000012, min.compaction.lag.ms -> 0, message.timestamp.type -> CreateTime, min.insync.replicas -> 1, segment.jitter.ms -> 0, preallocate -> false, min.cleanable.dirty.ratio -> 0.5, index.interval.bytes -> 4096, unclean.leader.election.enable -> false, retention.bytes -> 2147483648, delete.retention.ms -> 86400000, cleanup.policy -> [delete], flush.ms -> 9223372036854775807, segment.ms -> 604800000, segment.bytes -> 1073741824, retention.ms -> 172800000, message.timestamp.difference.max.ms -> 9223372036854775807, segment.index.bytes -> 10485760, flush.messages -> 9223372036854775807}. (kafka.log.LogManager)
[2019-08-07 21:59:37,134] INFO [Partition audit-1 broker=0] No checkpointed highwatermark is found for partition audit-1 (kafka.cluster.Partition)
[2019-08-07 21:59:37,138] INFO Replica loaded for partition audit-1 with initial high watermark 0 (kafka.cluster.Replica)
[2019-08-07 21:59:37,140] INFO [Partition audit-1 broker=0] audit-1 starts at Leader Epoch 0 from offset 0. Previous Leader Epoch was: -1 (kafka.cluster.Partition)
[2019-08-07 21:59:37,159] INFO Loading producer state from offset 0 for partition audit-0 with message format version 2 (kafka.log.Log)
[2019-08-07 21:59:37,160] INFO Completed load of log audit-0 with 1 log segments, log start offset 0 and log end offset 0 in 3 ms (kafka.log.Log)
[2019-08-07 21:59:37,162] INFO Created log for partition [audit,0] in /tmp/kafka-logs with properties {compression.type -> producer, message.format.version -> 1.0-IV0, file.delete.delay.ms -> 60000, max.message.bytes -> 1000012, min.compaction.lag.ms -> 0, message.timestamp.type -> CreateTime, min.insync.replicas -> 1, segment.jitter.ms -> 0, preallocate -> false, min.cleanable.dirty.ratio -> 0.5, index.interval.bytes -> 4096, unclean.leader.election.enable -> false, retention.bytes -> 2147483648, delete.retention.ms -> 86400000, cleanup.policy -> [delete], flush.ms -> 9223372036854775807, segment.ms -> 604800000, segment.bytes -> 1073741824, retention.ms -> 172800000, message.timestamp.difference.max.ms -> 9223372036854775807, segment.index.bytes -> 10485760, flush.messages -> 9223372036854775807}. (kafka.log.LogManager)
[2019-08-07 21:59:37,162] INFO [Partition audit-0 broker=0] No checkpointed highwatermark is found for partition audit-0 (kafka.cluster.Partition)
[2019-08-07 21:59:37,162] INFO Replica loaded for partition audit-0 with initial high watermark 0 (kafka.cluster.Replica)
[2019-08-07 21:59:37,162] INFO [Partition audit-0 broker=0] audit-0 starts at Leader Epoch 0 from offset 0. Previous Leader Epoch was: -1 (kafka.cluster.Partition)

7、显示消息主题audit的详情,验证分区是否设置为2

bin/kafka-topics.sh --describe --zookeeper localhost:12181

这是输出的解释。第一行给出了所有分区的摘要,每个附加行提供有关一个分区的信息。由于此主题只有两个分区,因此有两行。

  • “leader”是负责给定分区的所有读写的节点。每个节点将成为随机选择的分区部分的领导者。
  • “replicas”是复制此分区日志的节点列表,无论它们是否为领导者,或者即使它们当前处于活动状态。
  • “isr”是“同步”复制品的集合。这是副本列表的子集,该列表当前处于活跃状态并且已经被领导者捕获。

 8、通过kafka消息生产者产生消息,启动消费者接收消息

生产者产生消息:

bin/kafka-console-producer.sh --broker-list localhost:19092 --topic audit

>this is a message
>hello world kafka!

 

消费者接收消息:

bin/kafka-console-consumer.sh --bootstrap-server localhost:19092 --topic audit --from-beginning

hello world kafka!
this is a message

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值