云计算大数据之 Java 操作 Kafka

云计算大数据之 Java 操作 Kafka


版权声明:

本文为博主学习整理原创文章,如有不正之处请多多指教。

未经博主允许不得转载。https://blog.csdn.net/qq_42595261/article/details/83377837


Kafka常用命令

启动zookeeper服务(笔者存放路径为/root/abc

nohup zookeeper-server-start.sh /root/abc/kafka_2.11-0.10.0.1/config/zookeeper.properties &

启动kafka服务

nohup kafka-server-start.sh /root/abc/kafka_2.11-0.10.0.1/config/server.properties &

创建主题(副本数在后面进行修改)

kafka-topics.sh --create --zookeeper localhost:2181 --topic mytopic --partitions 1 --replication-factor 1

查看所有的主题信息

kafka-topics.sh --describe --zookeeper localhost:2181

查看指定主题信息

kafka-topics.sh --describe --zookeeper localhost:2181,localhost2:2181,localhost3:2181 --topic mytopic1

生成数据

kafka-console-producer.sh --broker-list localhost:9092 --topic mytopic

消费数据

kafka-console-consumer.sh --zookeeper localhost:2181 --topic mytopic

停止kafka

bin/kafka-server-stop.sh

停止zookeeper

bin/zookeeper-server-stop.sh

描述topic

bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic my-replicated-topic

删除topic(慎用,只会删除zookeeper中的元数据,消息文件须手动删除)

bin/kafka-topics.sh --delete --zookeeper localhost:2181 --topic topicname

删除topic中存储的内容在config/server.properties中找到如下的位置

# A comma seperated list of directories under which to store log files

log.dirs=/tmp/kafka-logs

查看topic某分区偏移量最大(小)值

bin/kafka-run-class.sh kafka.tools.GetOffsetShell --topic hive-mdatabase-hostsltable  --time -1 --broker-list node86:9092 --partitions 0

注: time为-1时表示最大值,time为-2时表示最小值

增加topic分区数

为topic t_cdr 增加10个分区

bin/kafka-topics.sh --zookeeper node01:2181  --alter --topic t_cdr --partitions 10

查看topic消费进度

这个会显示出consumer group的offset情况, 必须参数为--group, 不指定--topic,默认为所有topic

Displays the: Consumer Group, Topic, Partitions, Offset, logSize, Lag, Owner for the specified set of Topics and Consumer Group

bin/kafka-run-class.sh kafka.tools.ConsumerOffsetChecker

Example,

bin/kafka-run-class.sh kafka.tools.ConsumerOffsetChecker --group pv

Group           Topic              Pid Offset   logSize    Lag    Owner

pv              page_visits        0   21       21         0      none

pv              page_visits        1   19       19         0      none

pv              page_visits        2   20       20         0      none

史上最全KafKa原理介绍:

https://zm12.sm-tc.cn/?src=l4uLj8XQ0J2TkJjRnIybkdGRmovQhpyXmpGZmpGY0J6Ni5ack5rQm5qLnpaTjNDIy8bHz8rMzg%3D%3D&uid=970cdce60bf10ba2ea899844a387fe26&hid=037c91855a26a36aaad4e3c11a587078&pos=6&cid=9&time=1521077573732&from=click&restype=1&pagetype=0000004002000408&bu=structure_web_info&query=kafka%E5%8E%9F%E7%90%860+-1+1&mode=&v=1&force=true&wap=false&uc_param_str=dnnt0nwvepffrgibijbprsvdsdichei

Zookeeper单节点安装

1、解压zookeeper

tar -zxvf zookeeper-3.4.9.tar.gz

2、重命名 zoo_sample.cfg 为 zoo.cfg

vim zoo.cfg

tickTime=2000

initLimit=10

syncLimit=5

dataDir=/opt/zookeeper/data

dataLogDir=/opt/zookeeper/logs

clientPort=2181

配置解析:

tickTime: zookeeper中使用的基本时间单位, 毫秒值.

dataDir: 数据目录. 可以是任意目录.

dataLogDir: log目录, 同样可以是任意目录. 如果没有设置该参数, 将使用和dataDir相同的设置.

clientPort: 监听client连接的端口号.

启动:

zookeeper_home/bin/zkServer.sh start

查看服务: jps

5321 QuorumPeerMain

5338 Jps

查看运行状态:

zookeeper_home/bin/zkServer.sh status

zookeeper集群安装

需要在三台服务器上安装zookeeper,向在某一台上安装好之后通过scp的方式发送到其它主机

进入到conf目录:/usr/local/apps/zookeeper-3.4.9/conf

修改配置文件名称:mv zoo_sample.cfg zoo.cfg

修改zk的数据目录:dataDir=/opt/zookeeper/data

需要配置有哪些的服务节点:

zoo.cfg中配置:

放在zoo.cfg的文件末尾

tickTime=2000
dataDir=/opt/zookeeper/data     / / 此路径为新建路径,需提前新建

clientPort=2181
initLimit=10
syncLimit=5
server.1=master:2888:3888
server.2=node1:2888:3888
server.3=node2:2888:3888

server.1=broker1:2888:3888

server.2=broker2:2888:3888

server.3=broker3:2888:3888

broker:表示主机名

在数据目录中,需要创建一个id标志:操作如下:

在数据目录下,创建一个myid文件。内容为server.后的这个编号

如下面的操作。在keduox02主机上需要在数据目录中创建一个myid文件,内容为2

需要先创建数据目录

mkdir /opt/zookeeper/data

关闭防火墙

启动:

zkServer.sh start

可以通过zkServer.sh status查看状态

java 操作 KafKa

新建maven项目之前需要先安装该关系依赖

<dependency>

<groupId>org.apache.kafka</groupId>                 

<artifactId>kafka_2.10</artifactId>

<version>0.10.0.0</version>

</dependency>

java操作生产者

Properties props = new Properties();

//指定连接的服务器集群

        props.put("bootstrap.servers", "localhost1:9092,localhost2:9092,localhost3:9092");

//key和value进行序列化

        props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");

        props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");

        props.put("acks", "all");

        props.put("buffer.memory", 33554432);

//实例化生产者对象

        //Producer<String, String> producer = new KafkaProducer(props);

        KafkaProducer producer = new KafkaProducer(props);

       for (int i = 0; i < 100; i++) {

            //向生产者中写入数据

           String key = "key"+i;

           String data  = "hello data"+key;

            producer.send(new ProducerRecord("mytopic1",key,data));

           System.out.println("key "+key+"value "+data);

        }

        producer.close();

java操作消费者

//连接服务器的地址

Properties props = new Properties();

props.put("bootstrap.servers", "localhost1:9092,localhost2:9092,localhost3:9092");

props.put("group.id", "group001");

//如果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");

KafkaConsumer<String, String> consumer = new KafkaConsumer<>(props);

consumer.subscribe(Arrays.asList("mytopic1"));

while (true) {

//读取数据的超时时间

ConsumerRecords<String, String> records = consumer.poll(100);

//遍历拿到的数据

for (ConsumerRecord<String, String> record : records)

        System.out.println(record.value());

}

错误解决

代码没错,直接运行,能运行成功,但是生产者无法将数据写入topic中,消费者也无法从topic中拿到数据。需要在kafka的server.properties中新增配置项。解决办法网址链接:

https://blog.csdn.net/zhaominpro/article/details/79068141

 

 


我                              是                               有                              底                                线                           的

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值