El origen de datos Kafka proporciona un canal bidireccional para leer y escribir datos en Kafka. Este tema describe las capacidades de sincronización de datos que DataWorks ofrece para Kafka.
Versiones compatibles
DataWorks es compatible con Alibaba Cloud Kafka y versiones de Kafka autogestionadas desde la 0.10.2 hasta la 3.6.x.
La sincronización de datos no es compatible con versiones de Kafka anteriores a la 0.10.2. Esto se debe a que dichas versiones no admiten la recuperación de desplazamientos de partición y sus estructuras de datos podrían no ser compatibles con marcas de tiempo.
Lectura en tiempo real
-
Si utiliza una Serverless resource group de suscripción, debe estimar las especificaciones necesarias con antelación para evitar fallos en las tareas por falta de recursos.
Estime 1 CU por topic. También debe estimar los recursos según el tráfico:
Para datos de Kafka sin comprimir, estime 1 CU por cada 10 MB/s de tráfico.
Para datos de Kafka comprimidos, estime 2 CU por cada 10 MB/s de tráfico.
Para datos de Kafka comprimidos que requieren análisis sintáctico de JSON, estime 3 CU por cada 10 MB/s de tráfico.
-
Cuando utilice un resource group serverless de suscripción o una versión anterior de un resource group exclusivo para Data Integration:
Si su carga de trabajo tiene una alta tolerancia al failover, el uso de slots del clúster no debe superar el 80%.
Si su carga de trabajo tiene una baja tolerancia al failover, el uso de slots del clúster no debe superar el 70%.
El uso real de recursos depende de factores como el contenido y el formato de los datos. Después de su evaluación inicial de recursos, ajuste los recursos según el uso real durante la ejecución.
Limitaciones
El origen de datos Kafka es compatible con Serverless resource groups (recommended) y old versions of exclusive resource groups for Data Integration.
Lectura sin conexión de una sola tabla
Si tanto parameter.groupId como parameter.kafkaConfig.group.id están configurados, parameter.groupId tiene prioridad sobre group.id en el parámetro kafkaConfig.
Escritura en tiempo real en una sola tabla
Las operaciones de escritura no admiten la deduplicación de datos. Si se reinicia una tarea después de restablecer un desplazamiento o tras un failover, podrían escribirse datos duplicados.
Escritura en tiempo real para una base de datos completa
Las tareas de sincronización de datos en tiempo real son compatibles con Serverless resource groups (recommended) y old versions of exclusive resource groups for Data Integration.
Si la tabla de origen tiene una clave principal, el valor de dicha clave se utiliza como clave para el registro de Kafka. Esto garantiza que los cambios en la misma clave principal se escriban en orden dentro de la misma partición de Kafka.
Si la tabla de origen no tiene clave principal, dispone de dos opciones. Si selecciona la opción para sincronizar tablas sin claves principales, la clave del registro de Kafka estará vacía. Para garantizar que los cambios de la tabla se escriban en Kafka en orden, el topic de Kafka de destino debe tener una única partición. Si selecciona una clave principal personalizada, se utilizará una combinación de uno o más campos que no sean clave principal como clave para el registro de Kafka.
-
Para garantizar que los cambios de la misma clave principal se escriban en orden en la misma partición de Kafka, incluso si el clúster de Kafka devuelve una excepción, agregue la siguiente configuración en el formulario de parámetros extendidos.
{"max.in.flight.requests.per.connection":1,"buffer.memory": 100554432}ImportanteEsta configuración reduce significativamente el rendimiento de la replicación. Debe equilibrar el rendimiento con la necesidad de un orden estricto y fiabilidad.
Para obtener más información sobre el formato general de los mensajes escritos en Kafka durante la sincronización en tiempo real, el formato de los mensajes de latido y el formato de los mensajes correspondientes a cambios en los datos de origen, consulte Appendix: Message format.
Tipos de campo compatibles
Kafka proporciona almacenamiento de datos no estructurados. Un registro de Kafka suele incluir los siguientes campos: key, value, offset, timestamp, headers y partition. Cuando DataWorks lee o escribe datos en Kafka, procesa la información de la siguiente manera.
Lectura de datos
Cuando DataWorks lee datos de Kafka, puede analizarlos en formato JSON. La siguiente tabla describe cómo se procesa cada módulo de datos.
|
Módulo de datos del registro de Kafka |
Tipo de datos procesado |
|
key |
Depende del elemento de configuración keyType en la tarea de sincronización de datos. Para obtener más información sobre el parámetro keyType, consulte la descripción completa de parámetros en el apéndice. |
|
value |
Depende del elemento de configuración valueType en la tarea de sincronización de datos. Para obtener más información sobre el parámetro valueType, consulte la descripción completa de parámetros en el apéndice. |
|
offset |
Long |
|
timestamp |
Long |
|
headers |
String |
|
partition |
Long |
Escritura de datos
DataWorks escribe datos en Kafka en formato JSON o texto. La política de procesamiento varía según el tipo de tarea de sincronización, como se describe en la siguiente tabla.
Cuando los datos se escriben en formato de texto, no se incluyen los nombres de los campos. Los valores de los campos se separan mediante un delimitador.
Cuando una tarea de sincronización en tiempo real escribe datos en Kafka, utiliza el formato JSON integrado. Los datos incluyen información como mensajes de cambio de base de datos, hora empresarial e información de Lenguaje de Definición de Datos (DDL). Para obtener detalles sobre el formato de los datos, consulte Appendix: Message format.
|
Tipo de tarea de sincronización |
Formato del value escrito en Kafka |
Tipo de campo de origen |
Método de procesamiento para operaciones de escritura |
|
Sincronización sin conexión Nodo de sincronización sin conexión en DataStudio |
json |
String |
Cadena codificada en UTF-8 |
|
Boolean |
Convertido a la cadena codificada en UTF-8 "true" o "false" |
||
|
Time/Date |
Cadena codificada en UTF-8 con formato yyyy-MM-dd HH:mm:ss |
||
|
Numeric |
Cadena numérica codificada en UTF-8 |
||
|
Flujo de bytes |
El flujo de bytes se trata como una cadena codificada en UTF-8 y se convierte a cadena. |
||
|
text |
String |
Cadena codificada en UTF-8 |
|
|
Boolean |
Convertido a la cadena codificada en UTF-8 "true" o "false" |
||
|
Time/Date |
Cadena codificada en UTF-8 con formato yyyy-MM-dd HH:mm:ss |
||
|
Numeric |
Cadena numérica codificada en UTF-8 |
||
|
Flujo de bytes |
El flujo de bytes se trata como una cadena codificada en UTF-8 y se convierte a cadena. |
||
|
Sincronización en tiempo real: ETL en tiempo real a Kafka Nodo de sincronización en tiempo real en DataStudio |
json |
String |
Cadena codificada en UTF-8 |
|
Boolean |
Tipo booleano de JSON |
||
|
Time/Date |
|
||
|
Numeric |
Tipo numérico de JSON |
||
|
Flujo de bytes |
El flujo de bytes se codifica en Base64 y luego se convierte a una cadena codificada en UTF-8. |
||
|
text |
String |
Cadena codificada en UTF-8 |
|
|
Boolean |
Convertido a la cadena codificada en UTF-8 "true" o "false" |
||
|
Time/Date |
Cadena codificada en UTF-8 con formato yyyy-MM-dd HH:mm:ss |
||
|
Numeric |
Cadena numérica codificada en UTF-8 |
||
|
Flujo de bytes |
El flujo de bytes se codifica en Base64 y luego se convierte a una cadena codificada en UTF-8. |
||
|
Sincronización en tiempo real: Sincronización en tiempo real de una base de datos completa a Kafka Sincronización en tiempo real solo de datos incrementales |
Formato JSON integrado |
String |
Cadena codificada en UTF-8 |
|
Boolean |
Tipo booleano de JSON |
||
|
Time/Date |
Marca de tiempo en milisegundos de 13 dígitos |
||
|
Numeric |
Valor numérico de JSON |
||
|
Flujo de bytes |
El flujo de bytes se codifica en Base64 y luego se convierte a una cadena codificada en UTF-8. |
||
|
Solución de sincronización: Sincronización en tiempo real a Kafka con un clic Sincronización completa sin conexión + sincronización incremental en tiempo real |
Formato JSON integrado |
String |
Cadena codificada en UTF-8 |
|
Boolean |
Tipo booleano de JSON |
||
|
Time/Date |
Marca de tiempo en milisegundos de 13 dígitos |
||
|
Numeric |
Valor numérico de JSON |
||
|
Flujo de bytes |
El flujo de bytes se codifica en Base64 y luego se convierte a una cadena codificada en UTF-8. |
Agregar un origen de datos
Antes de desarrollar una tarea de sincronización en DataWorks, debe agregar el origen de datos necesario a DataWorks siguiendo las instrucciones en Data source configuration. Puede consultar las descripciones de parámetros en la consola de DataWorks para comprender el significado de los parámetros al agregar un origen de datos.
Desarrollar una tarea de sincronización de datos
Para obtener información sobre el punto de entrada y el procedimiento para configurar una tarea de sincronización, consulte las siguientes guías de configuración.
Configurar una tarea de sincronización sin conexión para una sola tabla
Para obtener más información sobre el procedimiento, consulte Configure an offline synchronization task in the codeless UI y Configure an offline synchronization task in the code editor.
Para ver la lista completa de parámetros y una demostración de script para el editor de código, consulte Appendix: Script demos and parameter descriptions.
Configurar una tarea de sincronización en tiempo real para una sola tabla o una base de datos completa
Para obtener instrucciones, consulte Configure a real-time synchronization task for a single table y Configure a real-time synchronization task for an entire database.
Configuración de autenticación
SSL
Al configurar un origen de datos Kafka, si establece el Special Authentication Method en SSL o SASL_SSL, habilita la autenticación SSL para el clúster de Kafka. Debe cargar el archivo de certificado del almacén de confianza del cliente e introducir la contraseña del almacén de confianza.
Si el clúster de Kafka es una instancia de Alibaba Cloud Kafka, consulte SSL certificate algorithm upgrade instructions para descargar el archivo de certificado del almacén de confianza correcto. La contraseña del almacén de confianza es KafkaOnsClient.
Si el clúster de Kafka es una instancia de EMR, consulte Use SSL encryption for Kafka connections para descargar el archivo de certificado del almacén de confianza correcto y obtener la contraseña del almacén de confianza.
Para un clúster autogestionado, debe cargar el certificado del almacén de confianza correcto e introducir la contraseña correcta del almacén de confianza.
El archivo de certificado del almacén de claves, la contraseña del almacén de claves y la contraseña SSL son necesarios únicamente cuando se habilita la autenticación SSL bidireccional para el clúster de Kafka. El servidor del clúster de Kafka utiliza esto para autenticar la identidad del cliente. La autenticación SSL bidireccional se habilita cuando se establece ssl.client.auth=required en el archivo server.properties del clúster de Kafka. Para obtener más información, consulte Use SSL encryption for Kafka connections.
GSSAPI
Si establece Sasl Mechanism en GSSAPI al configurar un origen de datos Kafka, debe cargar tres archivos de autenticación: un archivo de configuración JAAS, un archivo de configuración Kerberos y un archivo Keytab. También debe configurar los ajustes de DNS/HOST para el resource group exclusivo. Las siguientes secciones describen estos archivos y la configuración requerida de DNS y HOST.
Para un Serverless resource group, debe configurar la información de dirección del host mediante resolución DNS interna. Para obtener más información, consulte Internal DNS resolution (PrivateZone).
-
Archivo de configuración JAAS
El archivo JAAS debe comenzar con KafkaClient, seguido de todos los elementos de configuración encerrados entre llaves {}:
La primera línea dentro de las llaves define la clase del componente de inicio de sesión que se utilizará. Para diferentes mecanismos de autenticación SASL, la clase del componente de inicio de sesión es fija. Cada elemento de configuración posterior se escribe en formato key=value.
Todos los elementos de configuración, excepto el último, no deben terminar con punto y coma.
El último elemento de configuración debe terminar con punto y coma, y debe haber otro punto y coma después de la llave de cierre
}.
Si no se cumplen los requisitos de formato, no se podrá analizar sintácticamente el archivo de configuración JAAS. El siguiente código muestra un formato típico de archivo de configuración JAAS. Reemplace los marcadores de posición xxx con su información real.
KafkaClient { com.sun.security.auth.module.Krb5LoginModule required useKeyTab=true keyTab="xxx" storeKey=true serviceName="kafka-server" principal="kafka-client@EXAMPLE.COM"; };Elemento de configuración
Descripción
Módulo de inicio de sesión
Debe establecerse en com.sun.security.auth.module.Krb5LoginModule.
useKeyTab
Debe establecerse en true.
keyTab
Puede especificar cualquier ruta. Cuando se ejecuta la tarea de sincronización, el sistema descarga automáticamente el archivo keytab que cargó durante la configuración del origen de datos a una ruta local. Luego, el sistema utiliza esta ruta local para el elemento de configuración keytab.
storeKey
Especifica si el cliente guarda la clave. Puede establecerlo en true o false. No afecta la sincronización de datos.
serviceName
Corresponde al elemento de configuración sasl.kerberos.service.name en el archivo de configuración server.properties del servidor Kafka. Configure este elemento según sea necesario.
principal
El principal de Kerberos utilizado por el cliente Kafka. Configúrelo según sea necesario y asegúrese de que el archivo keytab cargado contenga la clave para este principal.
-
Archivo de configuración Kerberos
El archivo de configuración Kerberos debe contener dos módulos: [libdefaults] y [realms].
El módulo [libdefaults] especifica los parámetros de autenticación Kerberos. Cada elemento de configuración del módulo se escribe en formato key=value.
El módulo [realms] especifica la dirección del Centro de Distribución de Claves (KDC). Puede contener varios submódulos realm. Cada submódulo realm comienza con el nombre del realm seguido de un signo igual (=).
A esto le sigue un conjunto de elementos de configuración encerrados entre llaves. Cada elemento de configuración también se escribe en formato key=value. El siguiente código muestra un formato típico de archivo de configuración Kerberos. Reemplace los marcadores de posición xxx con su información real.
[libdefaults] default_realm = xxx [realms] xxx = { kdc = xxx }Elemento de configuración
Descripción
[libdefaults].default_realm
El realm predeterminado utilizado al acceder a los nodos del clúster Kafka. Por lo general, es el mismo que el realm del principal del cliente especificado en el archivo de configuración JAAS.
Otros parámetros de [libdefaults]
El módulo [libdefaults] puede especificar otros parámetros de autenticación Kerberos, como ticket_lifetime. Configúrelos según sea necesario.
[realms].nombre del realm
Debe ser el mismo que el realm del principal del cliente especificado en el archivo de configuración JAAS y el [libdefaults].default_realm. Si el realm del principal del cliente en el archivo de configuración JAAS es diferente de [libdefaults].default_realm, debe incluir dos submódulos realms. Estos submódulos deben corresponder al realm del principal del cliente en el archivo de configuración JAAS y al [libdefaults].default_realm, respectivamente.
[realms].nombre del realm.kdc
Especifica la dirección y el puerto del KDC en formato ip:puerto, por ejemplo, kdc=10.0.0.1:88. Si se omite el puerto, el sistema utiliza el puerto predeterminado 88, por ejemplo, kdc=10.0.0.1.
-
Archivo Keytab
El archivo keytab debe contener la clave para el principal especificado en el archivo de configuración JAAS y debe ser verificable por el KDC. Por ejemplo, si hay un archivo llamado client.keytab en el directorio de trabajo actual, puede ejecutar el siguiente comando para verificar si el archivo keytab contiene la clave para el principal especificado.
klist -ket ./client.keytab Keytab name: FILE:client.keytab KVNO Timestamp Principal ---- ------------------- ------------------------------------------------------ 7 2018-07-30T10:19:16 te**@**.com (des-cbc-md5) -
Configuración de DNS y HOST para un resource group exclusivo
Cuando un clúster Kafka utiliza autenticación Kerberos, el KDC registra el principal de cada nodo utilizando el nombre de host del nodo. Cuando un cliente se conecta a un nodo del clúster Kafka, utiliza la configuración local de DNS y HOST para derivar el principal del nodo y luego solicita una credencial de acceso para el nodo al KDC. Cuando utiliza un resource group exclusivo para acceder a un clúster Kafka con autenticación Kerberos habilitada, debe configurar correctamente los ajustes de DNS y HOST para garantizar que se puedan obtener credenciales de acceso para los nodos del clúster desde el KDC:
-
Configuración de DNS
Si utiliza una instancia de PrivateZone para la resolución de nombres de dominio de los nodos del clúster Kafka en la VPC a la que está conectado el resource group exclusivo, puede agregar una ruta personalizada para las direcciones IP 100.100.2.136 y 100.100.2.138 a la conexión VPC. Esto garantiza que la configuración de resolución de nombres de dominio de PrivateZone para los nodos del clúster Kafka se aplique al resource group exclusivo. En el panel de navegación izquierdo de la consola de DataWorks, haga clic en resource group list. En la columna Actions de su resource group exclusivo, haga clic en network settings. En la pestaña VPC attachment, haga clic en custom route en la columna Actions. En el cuadro de diálogo que aparece, haga clic en Add Route, establezca Destination Type en IDC y Connection Method en Direct IP, introduzca la dirección IP directa y luego haga clic en Generate Route.
-
Configuración de HOST
Si no utiliza una instancia de PrivateZone para la resolución de nombres de dominio de los nodos del clúster Kafka en la VPC a la que está conectado el resource group exclusivo, debe agregar las asignaciones de dirección IP a nombre de dominio para cada nodo del clúster Kafka a la configuración de host. En el panel de navegación izquierdo de la consola de DataWorks, haga clic en resource group list. Busque su resource group, haga clic en network settings en la columna Actions y seleccione la pestaña host configuration. Haga clic en Add para agregar un dominio de host. La configuración de host tiene prioridad sobre la configuración de DNS.
-
PLAIN
Al configurar un origen de datos Kafka, si establece Sasl Mechanism en PLAIN, el archivo JAAS debe comenzar con KafkaClient, seguido de todos los elementos de configuración encerrados entre llaves {}.
La primera línea dentro de las llaves define la clase del componente de inicio de sesión que se utilizará. Para diferentes mecanismos de autenticación SASL, la clase del componente de inicio de sesión es fija. Cada elemento de configuración posterior se escribe en formato key=value.
Todos los elementos de configuración, excepto el último, no deben terminar con punto y coma.
El último elemento de configuración debe terminar con punto y coma. También debe agregarse un punto y coma después de la llave de cierre "}".
Si no se cumplen los requisitos de formato, no se podrá analizar sintácticamente el archivo de configuración JAAS. El siguiente código muestra un formato típico de archivo de configuración JAAS. Reemplace los marcadores de posición xxx con su información real.
KafkaClient {
org.apache.kafka.common.security.plain.PlainLoginModule required
username="xxx"
password="xxx";
};
|
Elemento de configuración |
Descripción |
|
Módulo de inicio de sesión |
Debe establecerse en org.apache.kafka.common.security.plain.PlainLoginModul |
|
username |
El nombre de usuario. Configure este elemento según sea necesario. |
|
password |
La contraseña. Configure este elemento según sea necesario. |
Preguntas frecuentes
Apéndice: Demostraciones de scripts y descripciones de parámetros
Configurar una tarea de sincronización por lotes mediante el editor de código
Si desea configurar una tarea de sincronización por lotes mediante el editor de código, debe configurar los parámetros relacionados en el script basándose en los requisitos unificados de formato de script. Para obtener más información, consulte Script mode configuration. La siguiente información describe los parámetros que debe configurar para los orígenes de datos cuando configura una tarea de sincronización por lotes mediante el editor de código.
Demostración de script de Reader
La siguiente configuración JSON lee datos de Kafka.
{
"type": "job",
"steps": [
{
"stepType": "kafka",
"parameter": {
"server": "host:9093",
"column": [
"__key__",
"__value__",
"__partition__",
"__offset__",
"__timestamp__",
"'123'",
"event_id",
"tag.desc"
],
"kafkaConfig": {
"group.id": "demo_test"
},
"topic": "topicName",
"keyType": "ByteArray",
"valueType": "ByteArray",
"beginDateTime": "20190416000000",
"endDateTime": "20190416000006",
"skipExceedRecord": "true"
},
"name": "Reader",
"category": "reader"
},
{
"stepType": "stream",
"parameter": {
"print": false,
"fieldDelimiter": ","
},
"name": "Writer",
"category": "writer"
}
],
"version": "2.0",
"order": {
"hops": [
{
"from": "Reader",
"to": "Writer"
}
]
},
"setting": {
"errorLimit": {
"record": "0"
},
"speed": {
"throttle": true,//When throttle is false, the mbps parameter does not take effect, which means that the rate is not limited. When throttle is true, the rate is limited.
"concurrent": 1,//The number of concurrent threads.
"mbps":"12"//The maximum transmission rate. 1 mbps is equal to 1 MB/s.
}
}
}
Parámetros del script de lector
|
Parámetro |
Descripción |
Obligatorio |
|
datasource |
Nombre del origen de datos. El editor de código permite agregar orígenes de datos. El valor de este parámetro debe coincidir con el nombre del origen de datos agregado. |
Sí |
|
server |
Dirección del servidor broker de Kafka en formato ip:port. Solo se puede configurar un server, pero debe asegurarse de que DataWorks pueda conectarse a las direcciones IP de todos los brokers del clúster de Kafka. |
Sí |
|
topic |
Tópico de Kafka. Un tópico es una agrupación de flujos de mensajes que procesa Kafka. |
Sí |
|
column |
Datos de Kafka que se leerán. Se admiten columnas constantes, columnas de datos y columnas de atributos.
|
Sí |
|
keyType |
Tipo de la clave de Kafka. Valores válidos: BYTEARRAY, DOUBLE, FLOAT, INTEGER, LONG y SHORT. |
No |
|
valueType |
Tipo del valor de Kafka. Valores válidos: BYTEARRAY, DOUBLE, FLOAT, INTEGER, LONG y SHORT. |
No |
|
beginDateTime |
Hora de inicio para el consumo de datos. Este parámetro especifica el límite izquierdo del intervalo de tiempo, inclusive. Es una cadena de tiempo en formato yyyymmddhhmmss. Puede usar este parámetro junto con los scheduling parameters. Para más información, consulte Supported formats of scheduling parameters. Nota
Esta función es compatible con Kafka 0.10.2 y versiones posteriores. |
Debe especificar este parámetro o beginOffset. Nota
beginDateTime y endDateTime se utilizan juntos. |
|
endDateTime |
Hora de fin para el consumo de datos. Este parámetro especifica el límite derecho del intervalo de tiempo, exclusivo. Es una cadena de tiempo en formato yyyymmddhhmmss. Puede usar este parámetro junto con los scheduling parameters. Para más información, consulte Supported formats of scheduling parameters. Nota
Esta función es compatible con Kafka 0.10.2 y versiones posteriores. |
Debe especificar este parámetro o endOffset. Nota
endDateTime y beginDateTime se utilizan juntos. |
|
beginOffset |
Desplazamiento inicial para el consumo de datos. Puede configurarlo en los siguientes formatos:
|
Debe especificar este parámetro o beginDateTime. |
|
endOffset |
Desplazamiento final para el consumo de datos. Se utiliza para controlar cuándo finaliza la tarea de consumo de datos. |
Debe especificar este parámetro o endDateTime. |
|
skipExceedRecord |
Kafka utiliza
|
No. El valor predeterminado es false. |
|
partition |
Un tópico de Kafka tiene varias particiones (partition). De forma predeterminada, una tarea de sincronización de datos lee datos de un intervalo de desplazamientos que abarca todas las particiones del tópico. También puede especificar una partition para leer datos únicamente del intervalo de desplazamientos de una sola partición. |
No. Sin valor predeterminado. |
|
kafkaConfig |
Al crear un cliente KafkaConsumer para el consumo de datos, puede especificar parámetros extendidos como bootstrap.servers, auto.commit.interval.ms y session.timeout.ms. Puede usar kafkaConfig para controlar el comportamiento de consumo de KafkaConsumer. |
No |
|
encoding |
Cuando keyType o valueType se establece en STRING, se utiliza la codificación especificada por este parámetro para analizar sintácticamente la cadena. |
No. El valor predeterminado es UTF-8. |
|
waitTIme |
Tiempo máximo, en segundos, que el objeto consumidor espera para extraer datos de Kafka en un solo intento. |
No. El valor predeterminado es 60. |
|
stopWhenPollEmpty |
Los valores válidos son true y false. Si este parámetro se establece en true y el consumidor extrae datos vacíos de Kafka (generalmente porque se han leído todos los datos del tópico, o debido a problemas de red o de disponibilidad del clúster de Kafka), la tarea se detiene inmediatamente. De lo contrario, reintenta hasta que vuelva a leer datos. |
No. El valor predeterminado es true. |
|
stopWhenReachEndOffset |
Este parámetro solo surte efecto cuando stopWhenPollEmpty es true. Los valores válidos son true y false.
|
No. El valor predeterminado es false. Nota
Esta configuración proporciona compatibilidad con versiones anteriores. Las versiones de Kafka anteriores a la 0.10.2 no admiten la comprobación del desplazamiento más reciente de todas las particiones. |
La siguiente tabla describe los parámetros de kafkaConfig.
|
Parámetro |
Descripción |
|
fetch.min.bytes |
Cantidad mínima de datos, en bytes, que el consumidor recupera del broker en una sola solicitud. El broker espera hasta que esta cantidad de datos esté disponible antes de responder al consumidor. |
|
fetch.max.wait.ms |
Tiempo máximo, en milisegundos, que el broker espera a que haya datos disponibles antes de responder a una solicitud de recuperación. El valor predeterminado es 500. El broker responde cuando se cumple la condición fetch.min.bytes o fetch.max.wait.ms. |
|
max.partition.fetch.bytes |
Especifica el número máximo de bytes que el broker puede devolver al consumidor desde cada partition. El valor predeterminado es 1 MB. |
|
session.timeout.ms |
Especifica el tiempo que el consumidor puede estar desconectado del servidor antes de dejar de recibir servicios. El valor predeterminado es 30 segundos. |
|
auto.offset.reset |
Acción que realiza el consumidor al leer sin desplazamiento o con un desplazamiento no válido (porque el consumidor ha estado inactivo durante mucho tiempo y el registro con ese desplazamiento ha caducado y se ha eliminado). El valor predeterminado es none, lo que significa que el desplazamiento no se restablece automáticamente. Puede cambiarlo a earliest, lo que significa que el consumidor lee los registros de la partition desde el desplazamiento más antiguo. |
|
max.poll.records |
Número de mensajes que puede devolver una sola llamada al método poll. |
|
key.deserializer |
Método de deserialización para la clave del mensaje, por ejemplo, org.apache.kafka.common.serialization.StringDeserializer. |
|
value.deserializer |
Método de deserialización para el valor de los datos, por ejemplo, org.apache.kafka.common.serialization.StringDeserializer. |
|
ssl.truststore.location |
Ruta del certificado raíz SSL. |
|
ssl.truststore.password |
Contraseña del almacén de certificados raíz. Si utiliza Alibaba Cloud Kafka, establézcala en KafkaOnsClient. |
|
security.protocol |
Protocolo de acceso. Actualmente, solo se admite el protocolo SASL_SSL. |
|
sasl.mechanism |
Método de autenticación SASL. Si utiliza Alibaba Cloud Kafka, use PLAIN. |
|
java.security.auth.login.config |
Ruta del archivo de autenticación SASL. |
Ejemplo de script de escritor
El siguiente código muestra la configuración JSON para escribir datos en Kafka.
{
"type":"job",
"version":"2.0",//The version number.
"steps":[
{
"stepType":"stream",
"parameter":{},
"name":"Reader",
"category":"reader"
},
{
"stepType":"Kafka",//The plug-in name.
"parameter":{
"server": "ip:9092", //The server address of Kafka.
"keyIndex": 0, //The column to be used as the key. Must follow camel case naming conventions, with k in lowercase.
"valueIndex": 1, //The column to be used as the value. Currently, you can only select one column from the source data or leave this parameter empty. If empty, all source data is used.
//For example, to use the 2nd, 3rd, and 4th columns of an ODPS table as the kafkaValue, create a new ODPS table, clean and integrate the data from the original ODPS table into the new table, and then use the new table for synchronization.
"keyType": "Integer", //The type of the Kafka key.
"valueType": "Short", //The type of the Kafka value.
"topic": "t08", //The Kafka topic.
"batchSize": 1024 //The amount of data written to Kafka at a time, in bytes.
},
"name":"Writer",
"category":"writer"
}
],
"setting":{
"errorLimit":{
"record":"0"//The number of error records.
},
"speed":{
"throttle":true,//When throttle is false, the mbps parameter does not take effect, which means that the rate is not limited. When throttle is true, the rate is limited.
"concurrent":1, //The number of concurrent jobs.
"mbps":"12"//The maximum transmission rate. 1 mbps is equal to 1 MB/s.
}
},
"order":{
"hops":[
{
"from":"Reader",
"to":"Writer"
}
]
}
}
Parámetros del script de escritor
|
Parámetro |
Descripción |
Obligatorio |
|
datasource |
Nombre del origen de datos. El editor de código permite agregar orígenes de datos. El valor de este parámetro debe coincidir con el nombre del origen de datos agregado. |
Sí |
|
server |
Dirección del servidor de Kafka en formato ip:port. |
Sí |
|
topic |
Tópico de Kafka. Es una categoría para los distintos flujos de mensajes que procesa Kafka. Cada mensaje publicado en un clúster de Kafka tiene una categoría, denominada tópico. Un tópico es una colección de un grupo de mensajes. |
Sí |
|
valueIndex |
Columna del escritor de Kafka que se utiliza como valor. Si no se especifica, todas las columnas se concatenan para formar el valor de forma predeterminada. El separador se especifica mediante fieldDelimiter. |
No |
|
writeMode |
Cuando valueIndex no está configurado, este parámetro determina el formato para concatenar todas las columnas del registro de origen y formar el valor del registro de Kafka. Los valores válidos son text y JSON. El valor predeterminado es text.
Por ejemplo, si un registro de origen tiene tres columnas con valores a, b y c, y writeMode se establece en text y fieldDelimiter en #, el valor del registro de Kafka escrito será la cadena a#b#c. Si writeMode se establece en JSON y column en [{"name":"col1"},{"name":"col2"},{"name":"col3"}], el valor del registro de Kafka escrito será la cadena {"col1":"a","col2":"b","col3":"c"}. Si valueIndex está configurado, este parámetro no tiene efecto. |
No |
|
column |
Campos de la tabla de destino en los que se escribirán los datos, separados por comas. Por ejemplo: Cuando valueIndex no está configurado y writeMode se establece en JSON, este parámetro define los nombres de campo en la estructura JSON para los valores de columna del registro de origen. Por ejemplo,
Si valueIndex está configurado, o si writeMode se establece en text, este parámetro no tiene efecto. |
Obligatorio cuando valueIndex no está configurado y writeMode se establece en JSON. |
|
partition |
Especifica el número de la partición del tópico de Kafka en la que se escribirán los datos. Debe ser un entero mayor o igual que 0. |
No |
|
keyIndex |
Columna del escritor de Kafka que se utiliza como clave. El valor del parámetro keyIndex debe ser un entero mayor o igual que 0. De lo contrario, la tarea fallará. |
No |
|
keyIndexes |
Matriz de los números ordinales de las columnas del registro de origen que se utilizan como clave para el registro de Kafka. El número ordinal de la columna comienza en 0. Por ejemplo, [0,1,2] concatenará los valores de todos los números de columna configurados con comas para formar la clave del registro de Kafka. Si no se especifica, la clave del registro de Kafka es null y los datos se escriben en las particiones del tópico de forma rotatoria. Solo puede especificar este parámetro o keyIndex. |
No |
|
fieldDelimiter |
Cuando writeMode se establece en text y valueIndex no está configurado, todas las columnas del registro de origen se concatenan utilizando el separador de columnas especificado por este parámetro para formar el valor del registro de Kafka. Puede configurar un solo carácter o varios caracteres como separador. Puede configurar caracteres Unicode en el formato \u0001. Se admiten caracteres de escape como \t y \n. El valor predeterminado es \t. Si writeMode no se establece en text o si valueIndex está configurado, este parámetro no tiene efecto. |
No |
|
keyType |
Tipo de la clave de Kafka. Valores válidos: BYTEARRAY, DOUBLE, FLOAT, INTEGER, LONG y SHORT. |
Sí |
|
valueType |
Tipo del valor de Kafka. Valores válidos: BYTEARRAY, DOUBLE, FLOAT, INTEGER, LONG y SHORT. |
Sí |
|
nullKeyFormat |
Si el valor de la columna de origen especificada por keyIndex o keyIndexes es null, se reemplaza por la cadena especificada por este parámetro. Si no se configura, no se realiza ningún reemplazo. |
No |
|
nullValueFormat |
Si el valor de una columna de origen es null, se reemplaza por la cadena especificada por este parámetro al ensamblar el valor del registro de Kafka. Si no especifica este parámetro, no se realiza ningún reemplazo. |
No |
|
acks |
Configuración de acks al inicializar el productor de Kafka. Determina el método de confirmación para escrituras exitosas. De forma predeterminada, el parámetro acks se establece en all. Los valores válidos para acks son:
|
No |
Apéndice: Definición del formato de mensaje para escritura en Kafka
Después de configurar y ejecutar una tarea de sincronización en tiempo real, los datos leídos de la base de datos de origen se escriben en un tópico de Kafka en formato JSON. Primero, todos los datos existentes en la tabla de origen especificada se escriben en el tópico de Kafka correspondiente. Luego, la tarea inicia la sincronización en tiempo real para escribir continuamente datos incrementales en el tópico. La información de cambios DDL incrementales de la tabla de origen también se escribe en el tópico de Kafka en formato JSON. Puede obtener el estado y la información de cambios de los mensajes escritos en Kafka. Para más información, consulte Appendix: Message format.
En los datos JSON de una tarea de sincronización sin conexión, los campos payload.sequenceId, payload.timestamp.eventTime y payload.timestamp.checkpointTime se establecen en -1.
Apéndice: Tipos de campo JSON
Cuando writeMode se establece en JSON, puede definir el tipo de campo JSON mediante el campo type dentro del parámetro column. Durante una operación de escritura, el sistema intenta convertir el valor de la columna del registro de origen al tipo especificado. Un error en la conversión de tipo genera datos sucios.
|
Valor válido |
Descripción |
|
JSON_STRING |
Convierte el valor de la columna del registro de origen en una cadena y lo escribe en el campo JSON. Por ejemplo, si el valor de la columna del registro de origen es el entero |
|
JSON_NUMBER |
Convierte el valor de la columna del registro de origen en un número y lo escribe en el campo JSON. Por ejemplo, si el valor de la columna del registro de origen es la cadena |
|
JSON_BOOL |
Convierte el valor de la columna del registro de origen en un valor booleano y lo escribe en el campo JSON. Por ejemplo, si el valor de la columna del registro de origen es la cadena |
|
JSON_ARRAY |
Convierte el valor de la columna del registro de origen en una matriz JSON y lo escribe en el campo JSON. Por ejemplo, si el valor de la columna del registro de origen es la cadena |
|
JSON_MAP |
Convierte el valor de la columna del registro de origen en un objeto JSON y lo escribe en el campo JSON. Por ejemplo, si el valor de la columna del registro de origen es la cadena |
|
JSON_BASE64 |
Convierte una matriz de bytes de la columna de origen en una cadena codificada en BASE64 y la escribe en el campo JSON. Por ejemplo, si el valor de la columna del registro de origen es una matriz de 2 bytes representada en hexadecimal como |
|
JSON_HEX |
Convierte una matriz de bytes de la columna de origen en una cadena hexadecimal y la escribe en el campo JSON. Por ejemplo, si el valor de la columna del registro de origen es una matriz de 2 bytes representada en hexadecimal como |