Linux安装kafka,flink并运行word count.py测试demo

本文介绍了如何在Linux系统中安装kafka和flink,包括下载压缩包、解压、启动服务、创建topic、消费者与生产者,以及flink的安装和运行Word Count Python示例。

Linux上安装kafka与flink非常简单(前提需要Java环境),首先到官网下载压缩包,kafka官网选择适合自己的tgz包,下载完可以放到usr/local/下(我的放到这个目录下,可以根据自己的情况),
之后进行解压缩

tar -xzvf 压缩包.tgz

然后进入解压目录启动zookeeper,(因为现在安装kafka无需安装zookeeper,kafka自带)

bin/zookeeper-server-start.sh config/zookeeper.properties

之后启动kafka

bin/kafka-server-start.sh config/server.properties

创建一个topic

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

创建消费者

bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning

创建完没有任何显示,是因为没有创建生产者,创建生产者

bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test

执行之后就可以输入消息按回车就会在消费者看到
安装flink
flink官网下载flink包,对应的Hadoop和Scala版本,下载完放到指定目录下进行解压

tar -xzvf 压缩包.tgz

进入解压目录,执行

bin/start-cluster.sh

启动flink,就可以在浏览器上输入http://localhost:8081,看到flink任务主页面,
运行wordcount.py demo执行

bin/pyflink.sh ./wordcount.py

就可以在浏览器上看到任务运行情况和输出结果。
执行

bin/stop-cluster.sh

关闭flink。

aused by: java.io.IOException: Could not find schema with id 4894 in registry at org.apache.flink.formats.avro.registry.confluent.ConfluentSchemaRegistryCoder.readSchema(ConfluentSchemaRegistryCoder.java:77) at org.apache.flink.formats.avro.RegistryAvroDeserializationSchema.deserialize(RegistryAvroDeserializationSchema.java:73) at org.apache.flink.formats.avro.AvroRowDataDeserializationSchema.deserialize(AvroRowDataDeserializationSchema.java:103) ... 19 common frames omitted Caused by: org.apache.flink.avro.registry.confluent.shaded.io.confluent.kafka.schemaregistry.client.rest.exceptions.RestClientException: Unauthorized; error code: 401 at org.apache.flink.avro.registry.confluent.shaded.io.confluent.kafka.schemaregistry.client.rest.RestService.sendHttpRequest(RestService.java:292) at org.apache.flink.avro.registry.confluent.shaded.io.confluent.kafka.schemaregistry.client.rest.RestService.httpRequest(RestService.java:352) at org.apache.flink.avro.registry.confluent.shaded.io.confluent.kafka.schemaregistry.client.rest.RestService.getId(RestService.java:660) at org.apache.flink.avro.registry.confluent.shaded.io.confluent.kafka.schemaregistry.client.rest.RestService.getId(RestService.java:642) at org.apache.flink.avro.registry.confluent.shaded.io.confluent.kafka.schemaregistry.client.CachedSchemaRegistryClient.getSchemaByIdFromRegistry(CachedSchemaRegistryClient.java:217) at org.apache.flink.avro.registry.confluent.shaded.io.confluent.kafka.schemaregistry.client.CachedSchemaRegistryClient.getSchemaBySubjectAndId(CachedSchemaRegistryClient.java:291) at org.apache.flink.avro.registry.confluent.shaded.io.confluent.kafka.schemaregistry.client.CachedSchemaRegistryClient.getSchemaById(CachedSchemaRegistryClient.java:276) at org.apache.flink.avro.registry.confluent.shaded.io.confluent.kafka.schemaregistry.client.SchemaRegistryClient.getById(SchemaRegistryClient.java:64) at org.apache.flink.formats.avro.registry.confluent.ConfluentSchemaRegistryCoder.readSchema(ConfluentSchemaRegistryCoder.java:74) ... 21 common frames omitted 这是什么原因
06-24
### 错误原因分析 在 Flink SQL 中解析 Avro 数据时,出现 `'Could not find schema with id 4894 in registry'` 和 `'Unauthorized; error code: 401'` 错误的原因可能涉及以下几点: 1. **Schema Registry 配置问题**: - `'Could not find schema with id 4894 in registry'` 表示 Schema Registry 无法找到指定的 Schema ID。这可能是由于 Schema Registry 中未注册该 Schema 或者 Kafka 消息中引用了错误的 Schema ID[^1]。 - `'Unauthorized; error code: 401'` 表明客户端没有权限访问 Schema Registry。通常是因为缺少正确的认证信息(如用户名和密码)或认证配置不正确[^5]。 2. **Kafka 消息格式问题**: - 如果 Kafka 消息中的 Avro 数据未正确关联到 Schema Registry 的 Schema ID,则会导致 `'Could not find schema with id 4894 in registry'` 错误[^3]。 3. **Flink 配置问题**: - Flink 在连接 Schema Registry 时需要提供正确的 URL 和认证信息。如果这些信息配置错误或缺失,可能会导致 `'Unauthorized; error code: 401'` 错误[^4]。 --- ### 解决方案 #### 1. 检查 Schema Registry 配置 确保 Schema Registry 已正确启动,Kafka 消息中的 Schema ID 对应的 Schema 已注册到 Schema Registry。可以通过以下方式验证: - 使用 Confluent 提供的工具检查 Schema 是否存在: ```bash curl -X GET http://<schema-registry-url>/schemas/ids/4894 ``` 如果返回 404,则说明 Schema ID 不存在,需要重新注册 Schema[^1]。 #### 2. 配置正确的认证信息 如果 Schema Registry 启用了身份验证,需在 FlinkKafka 连接器中配置认证信息。例如,在创建 Kafka 表时添加以下参数: ```sql WITH ( 'connector' = 'kafka', 'topic' = 'your_topic', 'properties.bootstrap.servers' = 'localhost:9092', 'format' = 'debezium-avro-confluent', 'debezium.avro.schema.registry.url' = 'http://<schema-registry-url>', 'debezium.avro.schema.registry.basic.auth.credentials.source' = 'USER_INFO', 'debezium.avro.schema.registry.basic.auth.user.info' = '<username>:<password>' ) ``` 上述配置中,`<username>` 和 `<password>` 是 Schema Registry 的认证凭据[^5]。 #### 3. 确保 Kafka 消息格式正确 检查 Kafka 生产者是否正确地将 Avro 数据与 Schema Registry 关联。如果生产者未正确设置 Schema ID,可能会导致解析失败。可以使用以下命令检查 Kafka 消息内容: ```bash kafka-avro-console-consumer --bootstrap-server localhost:9092 --topic your_topic --from-beginning --property schema.registry.url=http://<schema-registry-url> ``` 如果消息内容为空或格式不正确,需调整 Kafka 生产者的配置[^3]。 #### 4. 升级 FlinkKafka 连接器 如果使用的 FlinkKafka 连接器版本较旧,可能存在兼容性问题。建议升级到最新版本,特别是 Flink 1.12 及以上版本对 Avro 和 Schema Registry 的支持更完善[^5]。 --- ### 示例代码 以下是一个完整的 Flink SQL 创建表的示例,包含 Schema Registry 认证配置: ```sql CREATE TABLE kafka_table ( `id` INT, `name` STRING, `timestamp` TIMESTAMP(3) ) WITH ( 'connector' = 'kafka', 'topic' = 'your_topic', 'properties.bootstrap.servers' = 'localhost:9092', 'format' = 'debezium-avro-confluent', 'debezium.avro.schema.registry.url' = 'http://<schema-registry-url>', 'debezium.avro.schema.registry.basic.auth.credentials.source' = 'USER_INFO', 'debezium.avro.schema.registry.basic.auth.user.info' = '<username>:<password>' ); ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值