首頁  >  文章  >  後端開發  >  Kafka 架構註冊表 - 代理程式:代理程式無法驗證記錄

Kafka 架構註冊表 - 代理程式:代理程式無法驗證記錄

王林
王林轉載
2024-02-08 21:06:081099瀏覽

Kafka 架构注册表 - 代理:代理无法验证记录

php小編小新在這篇文章中將為大家介紹Kafka架構註冊表中的一個重要概念:代理程式。在Kafka中,代理程式是一種核心元件,負責管理和處理訊息流。然而,代理無法驗證記錄,這意味著一旦記錄被寫入代理,就無法再進行驗證和更改。這個特性可能會對一些特定的使用情境和安全性產生影響,因此在使用Kafka時需要注意這一點。接下來,我們將詳細解析代理無法驗證記錄的原因以及可能引發的問題。

問題內容

我正在使用 Kafka 架構註冊表驗證架構。問題是,即使我輸入了正確的架構,我仍然收到錯誤 Broker: Broker failed to verify record.

#confluence.value.schema.validation 設定為 true,以便可以在目前代理程式層級檢查值的架構。

我設定的架構和我發送的資料如下。

{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "additionalProperties": false,
  "description": "Sample schema to help you get started.",
  "properties": {
    "test": {
      "type": "string"
    }
  },
  "title": "schema_test",
  "type": "object"
}
{"test": "test1"}

另外,我使用go發送數據,數據的程式碼如下。

// main

func main() {
    kafka.ProduceData("schema_test", []byte(`{"test": "test1"}`))
}
<code>// kafka
func ProduceData(topic string, data []byte) {

    conf := ReadConfig()

    p, err := kafka.NewProducer(&conf)

    if err != nil {
        fmt.Printf("Failed to create producer: %s", err)
        os.Exit(1)
    }

    defer p.Close()

    // Go-routine to handle message delivery reports and
    // possibly other event types (errors, stats, etc)
    go func() {
        for e := range p.Events() {
            switch ev := e.(type) {
            case *kafka.Message:
                if ev.TopicPartition.Error != nil {
                    fmt.Printf("Failed to deliver message: %v\n", ev.TopicPartition)
                } else {
                    fmt.Printf("Produced event to topic %s: key = %-10s value = %s\n",
                        *ev.TopicPartition.Topic, string(ev.Key), string(ev.Value))
                }
            }
        }
    }()

    p.Produce(&kafka.Message{
        TopicPartition: kafka.TopicPartition{Topic: &topic, Partition: kafka.PartitionAny},
        Value:          data,
    }, nil)

    // Wait for all messages to be delivered
    p.Flush(15 * 1000)
}
</code>

正確答案


#對於經紀人如何實際驗證資料似乎存在誤解。它按預期工作。您需要一個架構 ID。您只是發送有關主題的純 JSON,沒有 ID。註冊表上的架構並不重要,重要的是它的 ID。

來自文件

更具體地說,您添加到註冊表的模式只是主題上可能存在的許多「版本」之一(例如 topic-value)。每個版本都有一個唯一的 ID。驗證不僅僅使用最新版本;該 ID 在客戶端進行編碼。

請參閱使用 JSON 模式進行產生的 Confluence 範例(它本身應該進行記錄驗證)。

https://github.com /confluenceinc/confluence-kafka-go/blob/master/examples/json_ Producer_example/json_ Producer_example.go

代理端驗證只是為了防止錯誤序列化的資料或“毒丸”,正如您現在所做的那樣。

以上是Kafka 架構註冊表 - 代理程式:代理程式無法驗證記錄的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除