bin/kafka-topics.sh --bootstrap-server zookeeper1:9092 --create --topic 学号--partitions 1 --replication-factor 3
时间: 2024-05-09 10:13:18 浏览: 242
这是一个用于在Kafka集群中创建一个新的主题(topic)的命令,其中的参数含义如下:
--bootstrap-server:指定Kafka集群中的一个或多个broker地址,用于创建和管理topic
zookeeper1:9092:指定bootstrap-server的地址,zookeeper1是主机名,9092是端口号
--create:表示创建一个新主题
--topic:指定新主题的名称,本命令中指定了学号作为主题名称
--partitions:指定新主题的分区数,本命令中指定了1个分区
--replication-factor:指定新主题的副本数,本命令中指定了3个副本
这个命令的含义是在Kafka集群中创建一个名为“学号”的主题,并且将该主题划分为1个分区,每个分区有3个副本。如果执行成功,该主题会被添加到Kafka集群中。
相关问题
Kafka消费者订阅分区 在命令行启动Kafka后,手动创建’assgin_topic’主题,分区数量为2,执行命令如下: .\bin\windows\kafka-topics.bat --create --zookeeper localhost:2181 --replication-factor 1 --partitions 2 --topic assign_topic 1. 根据上面给出的主题,完成如下操作: (1)编写生产者程序,以通用唯一标识符UUID作为消息,发送给主题assign_topic; (2)编写消费者程序1,订阅主题的分区0,只消费分区0数据; (3)编写消费者程序2,订阅主题的分区1,只消费分区1数据;
以下是相应的代码:
生产者程序:
```java
import org.apache.kafka.clients.producer.*;
import java.util.Properties;
import java.util.UUID;
public class ProducerDemo {
public static void main(String[] args) {
String topicName = "assign_topic";
Properties props = new Properties();
props.put("bootstrap.servers", "localhost: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 < 10; i++) {
String uuid = UUID.randomUUID().toString();
producer.send(new ProducerRecord<>(topicName, uuid));
}
producer.close();
}
}
```
消费者程序1:
```java
import org.apache.kafka.clients.consumer.*;
import org.apache.kafka.common.TopicPartition;
import java.util.Collections;
import java.util.Properties;
public class ConsumerDemo1 {
public static void main(String[] args) {
String topicName = "assign_topic";
Properties props = new Properties();
props.put("bootstrap.servers", "localhost:9092");
props.put("group.id", "test-group");
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> consumer = new KafkaConsumer<>(props);
TopicPartition partition0 = new TopicPartition(topicName, 0);
consumer.assign(Collections.singletonList(partition0));
while (true) {
ConsumerRecords<String, String> records = consumer.poll(100);
for (ConsumerRecord<String, String> record : records) {
System.out.printf("offset = %d, key = %s, value = %s%n", record.offset(), record.key(), record.value());
}
}
}
}
```
消费者程序2:
```java
import org.apache.kafka.clients.consumer.*;
import org.apache.kafka.common.TopicPartition;
import java.util.Collections;
import java.util.Properties;
public class ConsumerDemo2 {
public static void main(String[] args) {
String topicName = "assign_topic";
Properties props = new Properties();
props.put("bootstrap.servers", "localhost:9092");
props.put("group.id", "test-group");
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> consumer = new KafkaConsumer<>(props);
TopicPartition partition1 = new TopicPartition(topicName, 1);
consumer.assign(Collections.singletonList(partition1));
while (true) {
ConsumerRecords<String, String> records = consumer.poll(100);
for (ConsumerRecord<String, String> record : records) {
System.out.printf("offset = %d, key = %s, value = %s%n", record.offset(), record.key(), record.value());
}
}
}
}
```
生产者程序通过生成UUID作为消息,发送给主题"assign_topic"。消费者程序1订阅了主题"assign_topic"的分区0,只消费分区0数据;消费者程序2订阅了主题"assign_topic"的分区1,只消费分区1数据。
pythonKafka消费者订阅分区 在命令行启动Kafka后,手动创建’assgin_topic’主题,分区数量为2,执行命令如下: .\bin\windows\kafka-topics.bat --create --zookeeper localhost:2181 --replication-factor 1 --partitions 2 --topic assign_topic 1. 根据上面给出的主题,完成如下操作: (1)编写生产者程序,以通用唯一标识符UUID作为消息,发送给主题assign_topic; (2)编写消费者程序1,订阅主题的分区0,只消费分区0数据; (3)编写消费者程序2,订阅主题的分区1,只消费分区1数据;
以下是 Python Kafka 消费者订阅分区的代码示例:
生产者程序:
```python
from kafka import KafkaProducer
import uuid
producer = KafkaProducer(bootstrap_servers='localhost:9092')
for i in range(10):
message = str(uuid.uuid4()).encode('utf-8')
producer.send('assign_topic', message)
print(f"Sent message: {message}")
producer.close()
```
消费者程序1:
```python
from kafka import KafkaConsumer
consumer = KafkaConsumer('assign_topic', bootstrap_servers='localhost:9092',
group_id='my-group', auto_offset_reset='earliest',
enable_auto_commit=False, consumer_timeout_ms=1000)
# 订阅主题分区0
consumer.assign([TopicPartition('assign_topic', 0)])
try:
for message in consumer:
print(f"Received message from partition 0: {message.value}")
finally:
consumer.close()
```
消费者程序2:
```python
from kafka import KafkaConsumer
consumer = KafkaConsumer('assign_topic', bootstrap_servers='localhost:9092',
group_id='my-group', auto_offset_reset='earliest',
enable_auto_commit=False, consumer_timeout_ms=1000)
# 订阅主题分区1
consumer.assign([TopicPartition('assign_topic', 1)])
try:
for message in consumer:
print(f"Received message from partition 1: {message.value}")
finally:
consumer.close()
```
说明:
1. `KafkaProducer` 用于创建 Kafka 生产者,指定 Kafka 集群地址。
2. `uuid.uuid4()` 用于生成通用唯一标识符 UUID。
3. `producer.send()` 用于向主题发送消息。
4. `KafkaConsumer` 用于创建 Kafka 消费者,指定 Kafka 集群地址、消费者组、自动偏移重置策略、是否自动提交偏移量、消费超时时间等参数。
5. `consumer.assign()` 用于手动分配主题分区。
6. `for message in consumer` 用于消费消息。
阅读全文