kafka topic

回顾kafka极简入门(二)--安装

topic是kafka的生产者和消费者最小交互的单位,我们先从topic入手,创建第一个topic.

  • 进去kafka的bin目录我们发现有个kafka-topics.sh脚本

     

     

1.创建topic

  • 官方推荐如果kafka版本大于等于2.2使用--bootstrap-server替代--zookeeper (2.2以上也兼容--zookeeper)命令如下

 

kafka-topics.sh --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1 --topic mytest
  • 如果kafka版本小于2.2则命令如下

 

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

参数解释

  • 1.指定kafka集群(2.2以上)或zookeeper集群

 

--bootstrap-server node1:9092,node2:9092,node3:9092....

 

--zookeeper node1:2181,node2:2181,node3:2181...
  • 2.指定分区数

 

--partitions 
  • 3.指定分区的副本数

 

--replication-factor

所以执行上面命令将会创建一个名为mytest的topic,该topic下面有1个分区,并且该分区只有1个副本。

PS:除了手动创建主题外,还可以将代理配置为在发布不存在的主题时自动创建主题

2.查看topic

  • 查看指定的topic

 

kafka-topics.sh --describe --bootstrap-server localhost:9092 --topic mytest

image.png

Partition:0 表示该分区的id为0
leader: 9 表示分区的首领副本所在的broker(本例子中broker.id配置为9,所以这里显示9,具体在config/server.properties配置。这里只有一个分区,所以首领分区也就是自己)
Replicas: 9 表示分区的跟随副本所在的broker
Isr: 9 表示分区的同步副本所在的broker(同步副本可以认为跟首领副本准实时同步的副本,可以配置判断条件,后面会讲,首领副本挂掉后,服务器会从同步副本中选举新的首领)

  • 查看所有可用的topic

 

kafka-topics.sh --list--bootstrap-server localhost:9092

image.png

3.测试

  • 3.1 往topic发布信息

 

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

发送三个消息,分别是hello, world和!

 

image.png

  • 3.2 消费消息
    新开一个控制台

 

kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic mytest --from-beginning

注意: --from-beginning 表示从最开始的offset处开始消费。如果不写表示从最新的offset处消费,那么先发送了消息再开启消费者是收不到已发送的信息的

image.png


接收成功。

 

### Kafka Topic 在数据库逻辑复制链路中的作用与配置方法 #### 1. Kafka Topic 的作用 Kafka TopicKafka 中的数据流单元,用于存储从源端数据库捕获的变更数据,并将其传递到目标端数据库。在数据库逻辑复制链路中,Kafka Topic 起到了以下关键作用: - **数据缓冲**:Kafka Topic 提供了高吞吐量和低延迟的数据缓冲能力,能够有效地应对生产者和消费者之间的速率差异[^2]。 - **解耦生产者与消费者**:通过 Kafka Topic,源端数据库(生产者)和目标端数据库(消费者)可以独立运行,无需直接交互[^3]。 - **数据持久化**:Kafka Topic 可以将数据持久化到磁盘,确保即使在系统故障的情况下也能恢复数据[^4]。 #### 2. Kafka Topic 的配置方式 在数据库逻辑复制链路中,Kafka Topic 的配置需要根据具体需求进行优化,以下是一些关键配置参数及其作用: - **`partitions`**:定义 Topic 的分区数。分区数决定了并行度,通常建议设置为与消费者实例数相匹配,以实现负载均衡[^5]。 - **`replication-factor`**:定义 Topic 的副本数。较高的副本数可以提高数据可靠性,但会增加存储开销[^6]。 - **`retention.ms`**:设置消息在 Topic 中的保留时间。对于逻辑复制场景,可以根据目标端数据库的消费速度调整此参数[^7]。 - **`cleanup.policy`**:指定 Topic 的清理策略,常见的值为 `delete`(删除过期消息)或 `compact`(对消息进行压缩去重)[^8]。 以下是一个典型的 Kafka Topic 配置示例: ```bash kafka-topics.sh --create \ --zookeeper localhost:2181 \ --replication-factor 3 \ --partitions 6 \ --topic database-replication-topic \ --config retention.ms=86400000 \ --config cleanup.policy=compact ``` 上述命令创建了一个名为 `database-replication-topic` 的 Topic,具有以下特性: - 3 个副本以提高可靠性[^6]。 - 6 个分区以支持高并发[^5]。 - 消息保留时间为 1 天(86,400,000 毫秒)[^7]。 - 使用 `compact` 清理策略以减少存储开销[^8]。 #### 3. 数据流动过程中的 Kafka Topic 在数据库逻辑复制链路中,Kafka Topic 是数据流动的核心环节。以下是数据流动的典型过程: - **Source Connector 写入**:Source Connector 从源端数据库中捕获变更日志(如 DML、DDL 操作),并将这些变更以结构化格式写入 Kafka Topic[^9]。 - **数据处理**:在 Kafka 中间层,可以通过 Single Message Transform (SMT) 或 Kafka Streams 对消息进行转换、过滤或增强操作[^10]。 - **Sink Connector 读取**:Sink Connector 从 Kafka Topic 中读取消息,并将其写入目标端数据库,完成逻辑复制过程[^11]。 #### 4. 示例代码 以下是一个完整的配置示例,展示了如何通过 Kafka Topic 实现数据库逻辑复制链路: - **Source Connector 配置** ```properties name=mysql-source-connector connector.class=io.debezium.connector.mysql.MySqlConnector tasks.max=1 database.hostname=localhost database.port=3306 database.user=root database.password=password database.server.id=18405 database.whitelist=my_database table.whitelist=my_table kafka.topic=database-replication-topic ``` - **Sink Connector 配置** ```properties name=postgres-sink-connector connector.class=io.confluent.connect.jdbc.JdbcSinkConnector tasks.max=1 topics=database-replication-topic connection.url=jdbc:postgresql://localhost:5432/my_database connection.user=postgres connection.password=secret auto.create=true insert.mode=upsert pk.fields=id pk.mode=kafka ``` 上述配置中,`database-replication-topic` 是 Kafka Topic 的名称,连接了 Source Connector 和 Sink Connector[^12]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值