卡夫卡消息服务器,单台服务器部署 Zookeeper 及 kafka 消息中间件服务

在开发环境中,为减少服务器成本和提高开发效率,通常在一台测试服务器部署各种服务,使用不同的本地 IP 和不同端口号将涉及到集群的服务往往跑在一台机器上模拟集群,在这里我们称做伪集群。

最近在研究一个矿池的源码,在搭建服务的过程中消息中间件 kafka (是用于构建实时数据管道和流应用程序) 需要用到 Zookeeper 集群。这篇文章记录在一台开发机器部署伪集群 Zookeeper 服务。

安装 Zookeeper

cd /tmp

// 下载最新版本的 zookeeper

wget http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.4.11/zookeeper-3.4.11.tar.gz

// 解压缩安装包到指定目录, 在这里我们放在 /usr/local/ 目录下

tar -C /usr/local/ -zxf zookeeper-3.4.11.tar.gz

在 /usr/local/zookeeper-3.4.11 目录下可看到解压缩之后的文件夹,包含了 zookeeper 服务的配置文件和可执行文件。

修改配置文件

在 /usr/local/zookeeper-3.4.11/conf 目录下,有一个 zoo_sample.cfg 文件,首先我们复制三份,分别命名为 zoo_1.cfg, zoo_2.cfg, zoo_3.cfg

sudo cp zoo_sample.cfg zoo_1.cfg

sudo cp zoo_sample.cfg zoo_2.cfg

sudo cp zoo_sample.cfg zoo_3.cfg

然后修改这三个配置文件的内容,分别修改 dataDir, dataLogDir, clientPort 和 server.x 选项。

// zoo_1

tickTime=2000

initLimit=10

syncLimit=5

dataDir=/home/hww/source_code/zookeeper/zk1

dataLogDir=/home/hww/source_code/zookeeper/zk1/log

clientPort=2181

server.1=127.0.0.1:2888:3888

// zoo_2

tickTime=2000

initLimit=10

syncLimit=5

dataDir=/home/hww/source_code/zookeeper/zk2

dataLogDir=/home/hww/source_code/zookeeper/zk2/log

clientPort=2182

server.2=127.0.0.2:2888:3888

...

接着在每个节点的文件目录下增加 myid 文件和 version-2 文件夹。

// zoo_1 对应的数据文件夹

cd /home/hww/source_code/zookeeper/zk1

touch myid

echo 1 > myid

mkdir version-2

cd /home/hww/source_code/zookeeper/zk2

touch myid

echo 2 > myid

mkdir version-2

...

启动伪集群服务

根据不同的配置文件启动伪集群服务:

sudo /usr/local/zookeeper-3.4.11/bin/zkServer.sh start conf/zoo_x.cfg

sudo /usr/local/zookeeper-3.4.11/bin/zkServer.sh start conf/zoo_1.cfg

sudo /usr/local/zookeeper-3.4.11/bin/zkServer.sh start conf/zoo_2.cfg

sudo /usr/local/zookeeper-3.4.11/bin/zkServer.sh start conf/zoo_3.cfg

ps -ef | grep zoo_

root 845 1 0 16:30 pts/3 00:00:03 java -Dzookeeper.log.dir=. -Dzookeeper.root.logger=INFO,CONSOLE -cp /usr/local/zookeeper-3.4.11/bin/../build/classes:/usr/local/zookeeper-3.4.11/bin/../build/lib/*.jar:/usr/local/zookeeper-3.4.11/bin/../lib/slf4j-log4j12-1.6.1.jar:/usr/local/zookeeper-3.4.11/bin/../lib/slf4j-api-1.6.1.jar:/usr/local/zookeeper-3.4.11/bin/../lib/netty-3.10.5.Final.jar:/usr/local/zookeeper-3.4.11/bin/../lib/log4j-1.2.16.jar:/usr/local/zookeeper-3.4.11/bin/../lib/jline-0.9.94.jar:/usr/local/zookeeper-3.4.11/bin/../lib/audience-annotations-0.5.0.jar:/usr/local/zookeeper-3.4.11/bin/../zookeeper-3.4.11.jar:/usr/local/zookeeper-3.4.11/bin/../src/java/lib/*.jar:/usr/local/zookeeper-3.4.11/bin/../conf: -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.local.only=false org.apache.zookeeper.server.quorum.QuorumPeerMain conf/zoo_1.cfg

root 1380 1 0 16:37 pts/3 00:00:03 java -Dzookeeper.log.dir=. -Dzookeeper.root.logger=INFO,CONSOLE -cp /usr/local/zookeeper-3.4.11/bin/../build/classes:/usr/local/zookeeper-3.4.11/bin/../build/lib/*.jar:/usr/local/zookeeper-3.4.11/bin/../lib/slf4j-log4j12-1.6.1.jar:/usr/local/zookeeper-3.4.11/bin/../lib/slf4j-api-1.6.1.jar:/usr/local/zookeeper-3.4.11/bin/../lib/netty-3.10.5.Final.jar:/usr/local/zookeeper-3.4.11/bin/../lib/log4j-1.2.16.jar:/usr/local/zookeeper-3.4.11/bin/../lib/jline-0.9.94.jar:/usr/local/zookeeper-3.4.11/bin/../lib/audience-annotations-0.5.0.jar:/usr/local/zookeeper-3.4.11/bin/../zookeeper-3.4.11.jar:/usr/local/zookeeper-3.4.11/bin/../src/java/lib/*.jar:/usr/local/zookeeper-3.4.11/bin/../conf: -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.local.only=false org.apache.zookeeper.server.quorum.QuorumPeerMain conf/zoo_2.cfg

root 2855 1 0 16:46 pts/3 00:00:02 java -Dzookeeper.log.dir=. -Dzookeeper.root.logger=INFO,CONSOLE -cp /usr/local/zookeeper-3.4.11/bin/../build/classes:/usr/local/zookeeper-3.4.11/bin/../build/lib/*.jar:/usr/local/zookeeper-3.4.11/bin/../lib/slf4j-log4j12-1.6.1.jar:/usr/local/zookeeper-3.4.11/bin/../lib/slf4j-api-1.6.1.jar:/usr/local/zookeeper-3.4.11/bin/../lib/netty-3.10.5.Final.jar:/usr/local/zookeeper-3.4.11/bin/../lib/log4j-1.2.16.jar:/usr/local/zookeeper-3.4.11/bin/../lib/jline-0.9.94.jar:/usr/local/zookeeper-3.4.11/bin/../lib/audience-annotations-0.5.0.jar:/usr/local/zookeeper-3.4.11/bin/../zookeeper-3.4.11.jar:/usr/local/zookeeper-3.4.11/bin/../src/java/lib/*.jar:/usr/local/zookeeper-3.4.11/bin/../conf: -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.local.only=false org.apache.zookeeper.server.quorum.QuorumPeerMain conf/zoo_3.cfg

三个节点的集群服务已正常启动。

kafka 消息中间件

kafka 安装

sudo apt-get install -y default-jre

cd /tmp

wget https://mirrors.tuna.tsinghua.edu.cn/apache/kafka/0.11.0.2/kafka_2.11-0.11.0.2.tgz

sudo tar -C /usr/local/kafka -zxf kafka_2.11-0.11.0.2.tgz --strip 1

kafka 配置

cd /usr/local/kafka

sudo vi config/server.properties

// 修改 kafka 配置文件

...

// 连接集群节点

zookeeper.connect=127.0.0.1:2181,127.0.0.2:2182,127.0.0.3:2183

...

启动 kafka 服务

/usr/local/kafka/bin/kafka-server-start.sh /usr/local/kafka/config/server.properties

操作 kafka

在 zk1 新建 topic

/usr/local/kafka/bin/kafka-topics.sh --create --topic topic-test --zookeeper 1270.0.1:2181 --partitions 1 --replication-factor 1

列出 zk1 可用的 topic

/usr/local/kafka/bin/kafka-topics.sh --list --zookeeper 127.0.0.1:2181

通过 kafka-console-producer.sh 脚本生成消息

echo "hello world" | /usr/local/kafka/bin/kafka-console-producer.sh --broker-list 127.0.0.1:9092 --topic topic-test

通过 kafka-console-consumer.sh 脚本消费消息

/usr/local/kafka/bin/kafka-console-consumer.sh --bootstrap-server 127.0.0.1:9092 --topic topic-test --from-beginning

参考链接

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
卡夫卡Kafka)和ZooKeeper是两个常用于构建分布式系统的开源软件。 卡夫卡是一个分布式流处理平台,它具有高吞吐量、可持久化、可扩展等特点。它主要用于处理实时数据流,可以将数据流发布到多个订阅者,同时支持数据的持久化存储。卡夫卡的应用逻辑如下: 1. 发布和订阅模型:卡夫卡通过主题(Topic)来组织数据流,生产者(Producer)将消息发布到指定的主题,消费者(Consumer)则可以订阅这些主题并消费消息。 2. 分区和复制:卡夫卡将每个主题划分为多个分区(Partition),每个分区可以在不同的服务器上进行复制,以提高可靠性和容错性。 3. 批量处理和压缩:卡夫卡支持批量处理消息,可以将多个消息一次性发送或消费,以提高性能。同时,卡夫卡还支持消息的压缩,减少网络传输的数据量。 4. 消息保留策略:卡夫卡可以根据配置的策略来保留消息的时间或大小,超过指定限制的消息将被删除。 ZooKeeper是一个分布式协调服务,它提供了高可用性、一致性和可靠性的分布式数据管理功能。它主要用于解决分布式系统中的一致性问题,如选举、配置管理、命名服务等。ZooKeeper的应用逻辑如下: 1. 分布式协调:ZooKeeper通过提供共享的命名空间(类似于文件系统)来协调分布式系统中的各个节点。节点可以在ZooKeeper上创建、读取、更新和删除数据,实现分布式系统的协调与同步。 2. 选举:ZooKeeper可以用于实现分布式系统中的领导者选举。多个节点可以通过ZooKeeper进行通信,竞选成为领导者,并通过ZooKeeper的顺序节点特性来确定选举结果。 3. 配置管理:ZooKeeper可以用于管理分布式系统的配置信息。各个节点可以通过监听ZooKeeper上的配置节点,实时获取最新的配置信息。 4. 命名服务ZooKeeper可以用于实现分布式系统中的命名服务,将节点的名称映射到对应的地址或其他信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值