Kafka实战记录(2)-命令行操作

本文详细介绍Kafka的启动、停止流程,以及如何通过命令行管理topic,包括创建、查看、删除topic的操作步骤。同时,深入解析producer和consumer的使用方法,为初学者提供全面的Kafka实践指导。

目录

Kafka实战记录-目录:https://blog.youkuaiyun.com/weixin_39565597/article/details/104402046

1、启动kafka

# 启动kafka kafka-server-start.sh [-daemon] server.properties [--override property=value]*
# -daemon 是否以守护进程开启
# --override property=value 覆盖配置值,属性property改为value
[root@node1 kafka-2.2.2] ./bin/kafka-server-start.sh -daemon ./config/server.properties
# 查看进程
[root@node1 kafka-2.2.2] jps
49145 Kafka
# 关闭kafka
[root@node1 kafka-2.2.2] ./bin/kafka-server-stop.sh

2、topic主题

主题相关的命令:./bin/kafka-topics.sh
topic:主题、partition:分区
可以理解为一个topic为一条马路,马路上有多个车道(partition),各个车辆(message)进入马路后,选择一个车道,顺序驶入(append)等待绿灯(被消费)。

# 输入topic命令,查看帮助文档,可查看所有参数
[root@node1 kafka-2.2.2] ./bin/kafka-topics.sh
# 查看当前所有的topic
# --zookeeper:必传(新版本已换成--bootstrap-server node1:9092,node2:9092,node3:9092,此处是kafka的监听端口,在server.properties可配)
#            zookeeper是将数据放于zookeeper,而--bootstrap-server是将数据存于kafka的log目录
#            此处urls可以多个,实现自动的故障转移
# --list 查看列表
[root@node1 kafka-2.2.2] ./bin/kafka-topics.sh --zookeeper node1:2181,node2:2181,node3:2181 --list
# 创建topic 
# --create 说明此条命令为创建topic
# --topic hello 设置topic的名称为hello
# --partitions 2 分区数(即这条马路有多少条车道)
# --replication-factor 2 副本数,对每个分区进行备份,副本数不能大于服务器节点数量,因为副本存放在非当前节点的服务器
[root@node1 kafka-2.2.2] ./bin/kafka-topics.sh --zookeeper node1:2181,node2:2181,node3:2181 --replication-factor 2 --partitions 2  --create --topic hello
Created topic "hello".
# 查看创建的topic
# --describe 说明此条命令为查看topic
# PartitionCount:2 分区数为2
# ReplicationFactor:2 副本数为2
# Configs:配置信息
#        分区0:hello-0:副本存在于broker0和broker1,且broker0上的数据为leader
#        分区1:hello-1:副本存在于broker1和broker2,且broker1上的数据为leader
[root@node1 kafka-2.2.2] ./bin/kafka-topics.sh --zookeeper node1:2181,node2:2181,node3:2181 --describe --topic hello
Topic:hello	PartitionCount:2	ReplicationFactor:2	Configs:
	Topic: hello	Partition: 0	Leader: 0	Replicas: 0,1	Isr: 0,1
	Topic: hello	Partition: 1	Leader: 1	Replicas: 1,2	Isr: 1,2
# 查看kafka数据目录
# node1有:hello-0(主)
# node2有:hello-0、hello-1(主)
# node3有:hello-1
[root@node1 kafka-2.2.2] cd data
[root@node1 kafka-2.2.2] ls
# 删除topic(需要server.properties中设置delete.topic.enable=true,否则出现以下警告,删除也是标记删除)
# --delete 说明此条命令为删除命令
[root@node1 kafka-2.2.2] ./bin/kafka-topics.sh --delete --topic hello
Topic hello1 is marked for deletion.
Note: This will have no impact if delete.topic.enable is not set to true.

3、producer生产者

生产者相关的命令:./bin/kafka-console.producer.sh

# 查看帮助文档信息
# --broker-list <String: broker-list> 必传,broker集群节点
# --topic <String: topic> 必传,topic名称
[root@node1 kafka-2.2.2] ./bin/kafka-console.producer.sh
# 给topic为hello的主题发送消息
[root@node1 kafka-2.2.2] ./bin/kafka-console.producer.sh --broker-list node1:9092,node2:9092,node3:9092 --topic hello
>hello1

4、comsumer消费者

生产者相关的命令:./bin/kafka-console.comsumer.sh

# 查看帮助文档信息
# --bootstrap-server <String: server to    REQUIRED (unless old consumer isconnect to> 必传,新版本使用
# --zookeeper <String: urls>               REQUIRED (only when using oldconsumer) 必传,旧版本使用
# --from-beginning 		从头开始获取队列消息(由于生产者先打开,发送了hello1消息,消费者后打开,如果要获取到hello1,则需要加此参数)
[root@node1 kafka-2.2.2] ./bin/kafka-console-consumer.sh --bootstrap-server node1:9092,node2:9092,node3:9092 --from-beginning
hello1
### Kafka入门教程实战案例 #### 创建并配置开发环境 为了开始使用Kafka,需先安装Apache Kafka以及设置好相应的开发环境。通常情况下,在本地环境中搭建一个单节点的Kafka集群用于学习和测试就足够了。 #### 编写简单的生产者程序 通过编写Java应用程序来发送消息到指定的主题。这里展示了一个基本的例子,其中包含了如何创建一个自定义分区策略的生产者[^2]: ```java import org.apache.kafka.clients.producer.*; import java.util.Properties; public class ProducerPartitionStrategyTest { public static void main(String[] args) { Properties props = new Properties(); props.put("bootstrap.servers", "localhost:9092"); props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer"); props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer"); try (Producer<String, String> producer = new KafkaProducer<>(props)) { for (int i = 0; i < 100; i++) { ProducerRecord<String, String> record = new ProducerRecord<>("my-topic", Integer.toString(i), "message-" + i); producer.send(record); } } catch (Exception e) { System.err.println(e.getMessage()); } } } ``` 这段代码展示了怎样初始化`Properties`对象以配置连接参数,并利用`KafkaProducer`类实例化生产者对象。接着循环调用`send()`方法向名为`my-topic`的目标主题发布一系列记录。 #### 查看主题详情 可以借助命令行工具查看特定主题的信息,这有助于理解当前主题的状态及其副本分布情况。例如,下面这条指令可用于获取有关`my-replicated-topic`的具体描述信息[^3]: ```bash ./kafka-topics.sh --describe --zookeeper 192.168.1.106:2181 --topic my-replicated-topic ``` 此命令执行后将会返回关于该主题的一些元数据,包括其所属的分片数量、领导者位置以及其他重要的属性。 #### 构建简易流处理应用 构建基于Kafka Streams的应用程序,实现从输入主题读取消息并将它们转换成大写字母后再存入另一个输出主题的功能[^1]。以下是简化版的实现逻辑: ```java StreamsBuilder builder = new StreamsBuilder(); KStream<String, String> textLines = builder.stream("input-topic"); textLines.mapValues(value -> value.toUpperCase()).to("output-topic"); ``` 上述片段说明了如何建立一条由源主题流向目标主题的数据管道,并在此过程中对每条记录的内容进行了大小写的变换操作。 #### 客户端管理 除了单独启动各个组件外,还可以在同一进程中同时拥有多个生产者或消费者的实例。这种灵活性允许开发者更高效地管理和扩展自己的分布式系统架构[^4]。
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值