kafka集群搭建

4.1、准备3台虚拟机

192.168.140.128 kafka01

192.168.140.129 kafka02

192.168.140.130 kafka03

4.2、初始化环境

1安装jdk、安装zookeeper

2)安装目录

安装包存放的目录:/export/software

安装程序存放的目录:/export/servers

数据目录:/export/data

日志目录:/export/logs

mkdir -p /export/servers/

mkdir -p /export/software /

mkdir -p /export/data /

mkdir -p /export/logs /

本例:使用root用户

1) 验证环境

a) jdk环境 

 java -version

b) zookeeper环境

 启动zookeeper,查看zkServer.sh status

 

4.3、搭建Kafka集群

4.3.1准备安装包

 

由于kafkascala语言编写的,基于scala的多个版本,kafka发布了多个版本

其中2.11是推荐版本。

4.3.2、下载安装包及解压

tar -zxvf kafka_2.11-1.0.0.tgz -C /export/servers/

cd /export/servers/

rm -rf /export/servers/kafka

rm -rf /export/logs/kafka/

rm -rf /export/data/kafka

mv kafka_2.11-1.0.0 kafka

1) 解压文件

2) 删除之前的安装记录

3) 重命名

4.3.3、查看目录及修改配置文件

4.3.3.1查看目录---ll
4.3.3.2修改配置文件

进入配置目录,查看server.properties文件

cat server.properties |grep -v "#"

 

通过以上命令,查看到了默认的配置文件,对默认的文件进行修改。

修改三个地方

1) Borker.id

2) 数据存放的目录,注意目录如果不存在,需要新建下。

3) zookeeper的地址信息

#broker 的全局唯一编号,不能重复

broker.id=0

#用来监听链接的端口,producer 或 consumer 将在此端口建立连接

port=9092

#处理网络请求的线程数量 num.network.threads=3

#用来处理磁盘 IO 的线程数量

num.io.threads=8

#发送套接字的缓冲区大小

socket.send.buffer.bytes=102400

#接受套接字的缓冲区大小

socket.receive.buffer.bytes=102400

#请求套接字的缓冲区大小

 

socket.request.max.bytes=104857600

#kafka 运行日志存放的路径

log.dirs=/export/servers/logs/kafka

#topic 在当前 broker 上的分片个数

num.partitions=2

#用来恢复和清理 data 下数据的线程数量

num.recovery.threads.per.data.dir=1

#segment 文件保留的最长时间,超时将被删除

log.retention.hours=168

#滚动生成新的 segment 文件的最大时间

log.roll.hours=168

#日志文件中每个 segment 的大小,默认为 1G

log.segment.bytes=1073741824

#周期性检查文件大小的时间

log.retention.check.interval.ms=300000

#日志清理是否打开

log.cleaner.enable=true

#broker 需要使用 zookeeper 保存 meta 数据

zookeeper.connect=192.168.52.106:2181,192.168.52.107:2181,192.168.52.108:2181

#zookeeper 链接超时时间

zookeeper.connection.timeout.ms=6000

#partion buffer 中,消息的条数达到阈值,将触发 flush 到磁盘

log.flush.interval.messages=10000

#消息 buffer 的时间,达到阈值,将触发 flush 到磁盘

log.flush.interval.ms=3000

#删除 topic 需要 server.properties 中设置 delete.topic.enable=true 否则只是标记删除

delete.topic.enable=true

#此处的 host.name 为本机 IP(重要),如果不改,则客户端会抛出:Producer connection to localhost:9092 unsuccessful 错误! host.name=kafka01


4.3.4、分发配置文件及修改brokerid

将修改好的配置文件,分发到node02,node03

先在node02、node03上删除以往的安装记录

rm -rf /export/servers/kafka

rm -rf /export/logs/kafka/

rm -rf /export/data/kafka

 

分发安装包

scp -r /export/servers/kafka/ node02:/export/servers/

scp -r /export/servers/kafka/ node03:/export/servers/

修改node02上的broker.id

vi /export/servers/kafka/config/server.properties        

broker.id=1

修改node03上的broker.id

vi /export/servers/kafka/config/server.properties

broker.id=2

4.3.4、启动集群

cd /export/servers/kafka/bin

./kafka-server-start.sh /export/servers/kafka/config/server.properties

 

5操作集群的两种方式

需求:订单系统,需要发送消息。 后面后3个程序需要接受这个消息,并做后续的处理。

5.1、使用控制台运行

1) 创建一个订单的topic

bin/kafka-topics.sh --create --zookeeper node01:2181 --replication-factor 1 --partitions 1 --topic order

 

2) 编写代码启动一个生产者,生产数据

bin/kafka-console-producer.sh --broker-list node01:9092 --topic order

 

3) 编写代码启动给一个消费者,消费数据

bin/kafka-console-consumer.sh --zookeeper node01:2181 --from-beginning --topic order

 

5.2、使用Java api运行

1java工程-maven,依赖。

<dependency>
    <groupId>org.apache.kafka</groupId>
    <artifactId>kafka-clients</artifactId>
    <version>0.11.0.1</version>
</dependency>

 

1) 编写代码-写生产者的代码

/**
 * 订单的生产者代码
 */
public class OrderProducer {
    public static void main(String[] args) throws InterruptedException {
        /* 1、连接集群,通过配置文件的方式
         * 2、发送数据-topic:order,value
         */
        
Properties props = new Properties();
        props.put("bootstrap.servers""node01: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");
        KafkaProducer<String, String> kafkaProducer = new KafkaProducer<String, String>(props);
        for (int i = 0; i < 1000; i++) {
            // 发送数据 ,需要一个producerRecord对象,最少参数 String topic, V value
            
kafkaProducer.send(new ProducerRecord<String, String>("order""订单信息!"+i));
            Thread.sleep(100);
        }
    }
}

 

2) 编写代码-写消费者的代码

/**
 * 消费订单数据--- javaben.tojson
 */
public class OrderConsumer {
    public static void main(String[] args) {
        // 1\连接集群
        
Properties props = new Properties();
        props.put("bootstrap.servers""node01:9092");
        props.put("group.id""test");
        props.put("enable.auto.commit""true");
        props.put("auto.commit.interval.ms""1000");
        props.put("key.deserializer",
                "org.apache.kafka.common.serialization.StringDeserializer");
        props.put("value.deserializer",
                "org.apache.kafka.common.serialization.StringDeserializer");
        KafkaConsumer<String, String> kafkaConsumer = new KafkaConsumer<String, String>(props);
//        2、发送数据 发送数据需要,订阅下要消费的topic。  order
        
kafkaConsumer.subscribe(Arrays.asList("order"));
        while (true) {
            ConsumerRecords<String, String> consumerRecords = kafkaConsumer.poll(100);// jdk queue offer插入、poll获取元素。 blockingqueue put插入原生,take获取元素
            
for (ConsumerRecord<String, String> record : consumerRecords) {
                System.out.println("消费的数据为:" + record.value());
            }
        }
    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值