transforma.route.topic.expresión y expresión groovy

Estoy tratando de utilizar debezium transformas.route.topic.expression Aquí las entradas en configuración del conector

"transforms": "dropPrefix,unwrapi,route",
"transforms.dropPrefix.type": "org.apache.kafka.connect.transforms.RegexRouter",
"transforms.dropPrefix.regex": "rocketlawyer.dbo.(.*)",
"transforms.dropPrefix.replacement": "$1",
"transforms.unwrap.type": "io.debezium.transforms.ExtractNewRecordState",
"transforms.unwrap.drop.tombstones": "false",
"transforms.route.type": "io.debezium.transforms.ContentBasedRouter",
"transforms.route.language": "jsr223.groovy",
"transforms.route.topic.expression": "value.snapshotequals('true') ? ${topic} : cdc.$1"

cuando estoy aplicando la llamada de config estoy recibiendo el error

iguenkin_rocketlawyer_com@dbadm-r208:~/confluent$ curl -d  @mssql_trg_cf.json -H "Content-Type: application/json"  -X PUT http://localhost:8083/connectors/mssql_trg/config | jq
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  1326  100   242  100  1084  30250   132k --:--:-- --:--:-- --:--:--  161k
{
  "error_code": 500,
  "message": "Unexpected character ('\"' (code 34)): was expecting comma to separate Object entries\n at [Source: (org.glassfish.jersey.message.internal.ReaderInterceptorExecutor$UnCloseableInputStream); line: 1, column: 832]"
}

columna: 832

"transforms.route.topic.expression": "value.snapshotequals('true') ? ¿Qué?

columna 830 es un espacio en blanco en cadena : cdc

Aquí las preguntas

  1. ¿Cómo puedo estar seguro de que Jsr223. groovy es instalado y accesible a las transformaciones como estoy entendiendo que es una parte del conector de dibezium, por lo que no se enumera como un plugin separado aquí se instala la lista de jars whee debezium

`-rw-r--r-- 1 iguenkin_rocketlawyer_com 1234193955 20272 Dec 9 20:44 debezium-api-1.3.1.Final.jar

-rw-r--r-- 1 iguenkin_rocketlawyer_com 1234193955 91369 Dec 9 20:44 debezium-connector-sqlserver-1.3.1.Final.jar

-rw-r--r-- 1 iguenkin_rocketlawyer_com 1234193955 844500 Dec 9 20:44 debezium-core-1.3.1.Final.jar

-rw-r--r-- 1 iguenkin_rocketlawyer_com 1234193955 19090 Dec 15 22:01 debezium-scripting-1.3.1.Final.jar

-rw-r--r-- 1 iguenkin_rocketlawyer_com 1234193955 16839 Dec 16 01:04 groovy-jsr223-3.0.7-indy.jar `

  1. si groovy está instalado lo que está mal con la expresión ? He usado la siguiente documentación para establecer conector https://debezium.io/documentation/reference/configuration/content-based-routing.html

Pregunta hecha hace 3 años, 5 meses, 1 días - Por codecraftsman


2 Respuestas:

  • El error que estás experimentando parece estar relacionado con un problema en la expresión que estás intentando usar en la configuración de tu conector Debezium. Vamos a abordar tus preguntas una por una:

    • Para asegurarte de que Groovy está instalado y accesible para las transformaciones JSR223 en tu conector Debezium, puedes verificar la configuración de tus librerías y asegurarte de que el JAR 'groovy-jsr223-3.0.7-indy.jar' está presente y correctamente configurado en tu entorno. Sin embargo, dado que parece que estás teniendo problemas con la expresión en sí, es posible que el problema no esté relacionado con la instalación de Groovy.
    • Respecto a la expresión en la configuración del conector, el error parece estar en la sintaxis de la expresión en la línea `transforms.route.topic.expression`. Aquí tienes la corrección de la expresión:
    json
    "transforms.route.topic.expression": "value.snapshotequals('true') ? ${topic} : cdc.$1"
    

    En el fragmento corregido, se eliminó el signo de interrogación que no tenía sentido en la expresión. Además, asegúrate de que la expresión referenciada como $1 esté correctamente capturando el valor esperado.

    Espero que esta información te ayude a resolver el error en tu configuración. ¡Déjame saber si necesitas más ayuda!

    Respondida el Dec 19, 2020 a las 10:28 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • Respuestas a tus preguntas:

    1. ¿Cómo verificar que Jsr223.groovy está instalado y accesible para las transformaciones?

    Jsr223.groovy es un módulo del conector Debezium Scripting. Para verificar si está instalado, busca el archivo debezium-scripting-1.3.1.Final.jar en la lista de JAR que proporcionaste. Si este archivo está presente, el módulo está instalado.

    2. Corrección de la expresión de enrutamiento

    La expresión de enrutamiento proporcionada tiene un carácter de comillas dobles (") adicional después del carácter ?. Esta comilla doble adicional está causando el error de análisis JSON. Cámbiala por la siguiente expresión:

    
    "transforms.route.topic.expression": "value.snapshotequals('true') ? ${topic} : cdc.\$1"
    

    Ejemplo de configuración del conector actualizado:

    
    "transforms": "dropPrefix,unwrapi,route",
    "transforms.dropPrefix.type": "org.apache.kafka.connect.transforms.RegexRouter",
    "transforms.dropPrefix.regex": "rocketlawyer.dbo.(.)",
    "transforms.dropPrefix.replacement": "$1",
    "transforms.unwrapi.type": "io.debezium.transforms.ExtractNewRecordState",
    "transforms.unwrapi.drop.tombstones": "false",
    "transforms.route.type": "io.debezium.transforms.ContentBasedRouter",
    "transforms.route.language": "jsr223.groovy",
    "transforms.route.topic.expression": "value.snapshotequals('true') ? ${topic} : cdc.\$1"
    

    Nota:* Asegúrate de reiniciar el conector después de realizar los cambios de configuración para que los cambios surtan efecto.

    Respondida el Dec 19, 2020 a las 10:36 - por Gemini

    Votos positivos: 0 | Votos negativos: 0