(一)离线安装部署kafka(zookeeper、kafka集群与伪集群)

本文详细介绍Kafka与Zookeeper的集群及伪分布式安装过程,包括配置修改、环境变量设置、启动与状态检查等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

写在前面

1.zookeeper集群安装

2.zookeeper伪分布式安装(在同一台机器安装不同实例)

3.kafka集群安装

4.kafka伪分布式安装

5.Java API

6.关于kafka相关文章


写在前面

(1)本例使用三台服务器(VMware虚拟机搭建,centos7),已在hosts中配置主机与IP映射

主机IP部署内容
my108192.168.10.108zookeeper、kafka、jdk1.8
my109192.168.10.109zookeeper、kafka、jdk1.8
my110192.168.10.110zookeeper、kafka、jdk1.8

(2)zookeeper单独部署,非使用kafka自带;(zookeeper版本:zookeeper-3.4.11;kafka版本:kafka_2.11-2.1.0)

1.zookeeper集群安装

(1)下载zookeeper-3.4.11.tar.gz,可以从http://mirrors.hust.edu.cn/apache/ 中下载,找到zookeeper,下载对应版本。上传到虚拟机my108中

解压:tar -zxvf zookeeper-3.4.11.tar.gz

拷贝到home下:mv zookeeper-3.4.11 /home/

进入conf路径:cd /home/zookeeper-3.4.11/conf

复制zoo.cfg:cp zoo_sample.cfg zoo.cfg

(2)修改zoo.cfg配置(注意标红部分配置)

#数据目录

dataDir=/home/zookeeper-3.4.11/data

#日志目录

dataLogDir=/home/zookeeper-3.4.11/logs

#心跳间隔时间,zookeeper中使用的基本时间单位,毫秒值。每隔2秒发送一个心跳

tickTime=2000

#leader与客户端连接超时时间。表示5个心跳间隔

initLimit=5

#Leader与Follower之间的超时时间,表示2个心跳间隔

syncLimit=2

#客户端连接端口。多个实例的端口配置不可重复

clientPort=2181

#这个参数指定了清理频率,单位是小时,需要填写一个1或更大的整数,默认是0,表示不开启
autopurge.purgeInterval=24
#这个参数和上面的参数搭配使用,这个参数指定了需要保留的文件数目,默认是保留3个
autopurge.snapRetainCount=5

#server.NUM=IP:port1:port2 NUM表示本机为第几号服务器;IP为本机ip地址;

#port1为leader与follower通信端口;port2为参与竞选leader的通信端口

#多个实例的端口配置不能重复,如下:

server.0=my108:2888:3888

server.1=my109:2888:3888

server.2=my110:2888:3888

(3)添加myid

进入dataDir中的目录,执行:echo '0' > myid   (具体数字为zoo.cfg中配置的数字)

(4)拷贝文件到其他机器(my109、my110)

scp -r zookeeper-3.4.11 root@my110:/home/

注意修改:对应的myid

(5)配置环境变量(vi /etc/profile)

添加如下内容:

ZOOKEEPER_HOME=/home/zookeeper-3.4.11

PATH=$PATH:$ZOOKEEPER_HOME/bin

生效:source /etc/profile

(6)启动zookeeper

添加上面环境变量后就可以在任意目录下执行zookeeper命令了

#启动

zkServer.sh start

#查看状态

zkServer.sh status

#查看状态jps -l

2.zookeeper伪分布式安装(在同一台机器安装不同实例)

(1)每个实例配置文件zoo.cfg

在集群部署的基础上,在某个机器(如my108中)配置文件中复制3个zoo.cfg

cp –r zoo.cfg zoo0.cfg

cp –r zoo.cfg zoo1.cfg

cp –r zoo.cfg zoo2.cfg

主要修改如下内容

zoo0.cfg

# 数据目录
dataDir=/home/zookeeper-3.4.11/zk0/data
dataLogDir=/home/zookeeper-3.4.11/zk0/logs
# 端口号
clientPort=2180

server.0=localhost:2887:3887
server.1=localhost:2888:3888
server.2=localhost:2889:3889

zoo1.cfg

# 数据目录
dataDir=/home/zookeeper-3.4.11/zk1/data
dataLogDir=/home/zookeeper-3.4.11/zk1/logs
# 端口号
clientPort=2181

server.0=localhost:2887:3887
server.1=localhost:2888:3888
server.2=localhost:2889:3889

zoo2.cfg

# 数据目录
dataDir=/home/zookeeper-3.4.11/zk2/data
dataLogDir=/home/zookeeper-3.4.11/zk2/logs
# 端口号
clientPort=2182

server.0=localhost:2887:3887
server.1=localhost:2888:3888
server.2=localhost:2889:3889

(2)创建myid

在zk1、zk2、zk3下创建data与logs目录

进入dataDir中的目录,执行:echo 'X' > myid   (具体数字为zooX.cfg中配置的数字)

(3)启动zookeeper

# 启动3个zookeeper服务
zkServer.sh start /home/zookeeper-3.4.11/conf/zoo0.cfg
zkServer.sh start /home/zookeeper-3.4.11/conf/zoo1.cfg
zkServer.sh start /home/zookeeper-3.4.11/conf/zoo2.cfg

# 查看每个zookeeper对应的角色
zkServer.sh status /home/zookeeper-3.4.11/conf/zoo0.cfg
zkServer.sh status /home/zookeeper-3.4.11/conf/zoo1.cfg
zkServer.sh status /home/zookeeper-3.4.11/conf/zoo2.cfg

# 停止zookeeper服务 或jps -l 使用 kill 命令停止
zkServer.sh stop /home/zookeeper-3.4.11/conf/zoo0.cfg
zkServer.sh stop /home/zookeeper-3.4.11/conf/zoo1.cfg
zkServer.sh stop /home/zookeeper-3.4.11/conf/zoo2.cfg

3.kafka集群安装

具体配置项,详细信息可以参考官网:http://kafka.apache.org/quickstart

(1)下载:kafka_2.11-2.1.0.tgz(点击下载)

(2)解压:tar -zxvf kafka_2.11-2.1.0.tgz

(3)进入配置文件目录:cd /home/kafka_2.11-2.1.0/config

(4)修改配置文件(实际配置如下标红部分): vi server.properties

broker.id=0

listeners=PLAINTEXT://:9092

log.dirs=/tmp/kafka-logs0

zookeeper.connect=my108:2181,my109:2181,my110:2181

(5)启动(集群每台机器都要执行):

进入到kafka的bin目录执行(或将kafka的bin目录加入到PATH中)

kafka-server-start.sh -daemon /home/kafka_2.11-2.1.0/config/server.properties

4.kafka伪分布式安装

在原来配置基础上(集群配置中的my108节点配置),拷贝配置,启动不同实例

(1)拷贝配置文件,在kafka主目录下执行

cp config/server.properties config/server1.properties

cp config/server.properties config/server2.properties

(2)配置文件server.properties

config/server1.properties

broker.id=1
listeners=PLAINTEXT://:9093
log.dir=/tmp/kafka-logs1

config/server2.properties

broker.id=2
listeners=PLAINTEXT://:9094
log.dir=/tmp/kafka-logs2

(3)启动:(如果kafka的bin目录加入到系统path中可以在任意目录下执行)

kafka-server-start.sh -daemon /home/kafka_2.11-2.1.0/config/server1.properties
kafka-server-start.sh -daemon /home/kafka_2.11-2.1.0/config/server2.properties

(4)常用命令

#创建topic
kafka-topics.sh --create --zookeeper my108:2181 --replication-factor 2 --partitions 5 --topic test111
#查看topic列表
kafka-topics.sh --list --zookeeper my108:2181
#生产者
kafka-console-producer.sh --broker-list my108:9092 --topic test111
#消费者
kafka-console-consumer.sh --bootstrap-server my108:9092 --from-beginning --topic test111

5.Java API

(1)生产者(详细API

package demo;

import java.util.Properties;

import org.apache.kafka.clients.producer.KafkaProducer;
import org.apache.kafka.clients.producer.Producer;
import org.apache.kafka.clients.producer.ProducerRecord;
  
public class ProducerTest {
    public static void main(String[] args) {
        Properties props = new Properties();  
        props.put("bootstrap.servers", "my108:9092");
        props.put("acks", "all");
        props.put("retries", 0);
        props.put("batch.size", 16384);
        props.put("linger.ms", 1);
        props.put("buffer.memory", 33554432);
        props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
        props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");
 
        Producer<String, String> producer = new KafkaProducer<>(props);
        for(int i = 0; i < 2; i++){
        	producer.send(new ProducerRecord<>("test111", "key111", "ceshi"+i));
        }
        producer.close();
        System.out.println("end");
    }
}

(2)消费者(详细API

package demo;

import java.util.Arrays;
import java.util.Properties;

import org.apache.kafka.clients.consumer.ConsumerRecord;
import org.apache.kafka.clients.consumer.ConsumerRecords;
import org.apache.kafka.clients.consumer.KafkaConsumer;
  
public class ConsumerTest {  
	private static KafkaConsumer<String, String> consumer;
    private final static String TOPIC = "test111";
    public ConsumerTest(){
        Properties props = new Properties();
        props.put("bootstrap.servers", "my108:9092");
        //每个消费者分配独立的组号
        props.put("group.id", "group1");
        //如果value合法,则自动提交偏移量
        props.put("enable.auto.commit", "true");
        //设置多久一次更新被消费消息的偏移量
        props.put("auto.commit.interval.ms", "1000");
        //设置会话响应的时间,超过这个时间kafka可以选择放弃消费或者消费下一条消息
        props.put("session.timeout.ms", "30000");
        //自动重置offset
        //props.put("auto.offset.reset","earliest");
        props.put("key.deserializer",
                "org.apache.kafka.common.serialization.StringDeserializer");
        props.put("value.deserializer",
                "org.apache.kafka.common.serialization.StringDeserializer");
        consumer = new KafkaConsumer<String, String>(props);
    }

    public void consume(){
        consumer.subscribe(Arrays.asList(TOPIC));
        while (true) {
        	System.out.println("qqqq");
            ConsumerRecords<String, String> records = consumer.poll(100);
            for (ConsumerRecord<String, String> record : records){
                System.out.printf("offset = %d, key = %s, value = %s",record.offset(), record.key(), record.value());
                System.out.println();
            }
            try {
				Thread.sleep(10000);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
        }
    }

    public static void main(String[] args) {
        new ConsumerTest().consume();
    }
}

(3)运行所需jar包(在kafka安装包的libs)

kafka-clients-2.1.0.jar

log4j-1.2.17.jar

slf4j-api-1.7.25.jar

slf4j-log4j12-1.7.25.jar

6.关于kafka相关文章

(一)离线安装部署kafka(zookeeper、kafka集群与伪集群)

(二)kafka监控工具(Monitor、manager、eagle)

(三)kafka kerberos ACL权限控制

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值