Google BigQuery Sink Connector for Confluent Cloud

Note

If you are installing the connector locally for Confluent Platform, see Google BigQuery Sink Connector for Confluent Platform.

You can use the Kafka Connect Google BigQuery Sink connector for Confluent Cloud to export Avro, JSON Schema, Protobuf, or JSON (schemaless) data from Apache Kafka® topics to BigQuery. The BigQuery table schema is based upon information in the Apache Kafka® schema for the topic.

Features

Important

Confluent Cloud Enterprise customers must have a Confluent Cloud annual commitment to use this connector. Contact your Confluent Account Executive to learn more and to update your subscription, if necessary.

  • The connector supports insert operations and attempts to detect duplicates. See BigQuery troubleshooting for additional information.

  • The connector uses the BigQuery insertAll streaming api, which inserts records one at a time. The records are immediately available in the table for querying.

  • The connector supports streaming from a list of topics into corresponding tables in BigQuery.

    Note

    Make sure to review BigQuery rate limits if you are planning to use multiple connectors with a high number of tasks.

  • Even though the connector streams records one at a time by default (as opposed to running in batch mode), the connector is scalable because it contains an internal thread pool that allows it to stream records in parallel. The internal thread pool defaults to 10 threads.

  • The connector supports Avro, JSON Schema, Protobuf, or JSON (schemaless) input data formats. Schema Registry must be enabled to use a Schema Registry-based format (for example, Avro, JSON_SR (JSON Schema), or Protobuf).

  • For Avro, the connector provides the following configuration properties that support automated table creation and updates. You can select these properties in the UI or add them to the connector configuration, if using the Confluent Cloud CLI.

    • autoCreateTables: Automatically create BigQuery tables if they don’t already exist.
    • sanitizeTopics: Automatically sanitize topic names before using them as BigQuery table names. If not enabled, topic names are used as table names. Note that Kafka topics become tables in BigQuery.

    Note

    Source topic names must comply with BigQuery naming conventions even if sanitizeTopics is set to true.

    • autoUpdateSchemas: Automatically update BigQuery tables.
    • sanitizeFieldNames Automatically sanitize field names before using them as column names in BigQuery. Note that Kafka field names become column names in BigQuery.

Refer to Cloud connector limitations for additional information.

Quick Start

Use this quick start to get up and running with the Confluent Cloud Google BigQuery Sink connector. The quick start provides the basics of selecting the connector and configuring it to stream events to a BigQuery data warehouse.

Prerequisites
  • An active GCP account with authorization to create resources.

  • A BigQuery project is required. The project can be created using the Google Cloud Console.

  • A BigQuery dataset is required in the project.

  • A service account that can access the BigQuery project containing the dataset. You can create this service account in the Google Cloud Console.

  • The service account must have access to the BigQuery project containing the dataset. You create and download a key when creating a service account. The key must be downloaded as a JSON file. It resembles the example below:

    {
     "type": "service_account",
     "project_id": "confluent-842583",
     "private_key_id": "...omitted...",
     "private_key": "-----BEGIN PRIVATE ...omitted... =\n-----END PRIVATE KEY-----\n",
     "client_email": "confluent2@confluent-842583.iam.gserviceaccount.com",
     "client_id": "...omitted...",
     "auth_uri": "https://accounts.google.com/oauth2/auth",
     "token_uri": "https://oauth2.googleapis.com/token",
     "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/certs",
     "client_x509_cert_url": "https://www.googleapis.com/robot/metadata/confluent2%40confluent-842583.iam.gserviceaccount.com"
    }
    

    According to GCP specifications, the service account will either have to have the BigQueryEditor primitive IAM role or the bigquery.dataEditor predefined IAM role. The minimum permissions are:

    bigquery.datasets.get
    bigquery.tables.create
    bigquery.tables.get
    bigquery.tables.getData
    bigquery.tables.list
    bigquery.tables.update
    bigquery.tables.updateData
    
  • Kafka cluster credentials. You can use one of the following ways to get credentials:

    • Create a Confluent Cloud API key and secret. To create a key and secret, go to Kafka API keys in your cluster or you can autogenerate the API key and secret directly in the UI when setting up the connector.
    • Create a Confluent Cloud service account for the connector.
  • The Confluent Cloud CLI installed and configured for the cluster. See Install and Configure the Confluent Cloud CLI.

  • Schema Registry must be enabled to use a Schema Registry-based format (for example, Avro, JSON_SR (JSON Schema), or Protobuf).

  • Set Partitioning: Partition by ingestion time in BigQuery (as shown below).

    Auto update schemas set to true
  • You must create a BigQuery table before using the connector, if you leave Auto create tables (or autoCreateTables) set to false (the default).

  • You may need to create a schema in BigQuery, depending on how you set the Auto update schemas property (or autoUpdateSchemas).

    • Auto update schemas set to true: You do not have to create a schema.

    • Auto update schemas set to false (the default): You must create a schema in BigQuery (as shown below). The connector does not automatically update the table.

      Auto update schemas set to false

Using the Confluent Cloud GUI

Step 1: Launch your Confluent Cloud cluster.

See the Quick Start for Apache Kafka using Confluent Cloud for installation instructions.

Step 2: Add a connector.

Click Connectors. If you already have connectors in your cluster, click Add connector.

Step 3: Select your connector.

Click the Google BigQuery Sink connector icon.

Google BigQuery Sink Connector Icon

Step 4: Set up the connection.

Note

  • Make sure you have all your prerequisites completed.
  • An asterisk ( * ) designates a required entry.

Complete the following and click Continue.

  1. Select one or more topics.

  2. Enter a Connector Name.

  3. Enter your Kafka Cluster credentials. The credentials are either the API key and secret or the service account API key and secret.

  4. Upload your GCP credentials JSON file.

  5. Enter your BigQuery project and dataset names.

  6. Select an Input message format (data coming from the Kafka topic): AVRO, JSON_SR (JSON Schema), PROTOBUF, or JSON (schemaless). A valid schema must be available in Schema Registry to use a schema-based message format (for example, Avro, JSON_SR (JSON Schema), or Protobuf).

  7. Select whether or not to enable the following options:

    • Auto create tables: Designates whether to automatically create BigQuery tables if they don’t already exist.

    • Sanitize topics: Designates whether to automatically sanitize topic names before using them as table names. If not enabled, topic names are used as table names.

    • Auto update schemas: Designates whether or not to automatically update BigQuery tables.

    • Sanitize field names: Designates whether to automatically sanitize field names before using them as column names in BigQuery. BigQuery specifies that field names can only contain letters, numbers, and underscores. The sanitizer replaces invalid symbols with underscores. If the field name starts with a digit, the sanitizer adds an underscore in front of field name.

      Caution

      Fields a.b and a_b will have same value after sanitizing, which could cause a key duplication error. If not used, field names are used as column names.

  8. Enter the number of tasks in use by the connector. See Confluent Cloud connector limitations for additional task information.

Configuration properties that are not shown in the Confluent Cloud UI use the default values. For default values and property definitions, see Google BigQuery Sink Connector Configuration Properties.

Step 5: Launch the connector.

Verify the connection details and click Launch.

Launch the connector

Step 6: Check the connector status.

The status for the connector should go from Provisioning to Running.

Check the connector status

Step 7: Check the results in BigQuery.

  1. From the Google Cloud Console, go to your BigQuery project.
  2. Query your datasets and verify that new records are being added.

Tip

When you launch a connector, a Dead Letter Queue topic is automatically created. See Confluent Cloud Dead Letter Queue for details.

For additional information about this connector, see Google BigQuery Sink Connector for Confluent Platform. Note that not all Confluent Platform connector features are provided in the Confluent Cloud connector.

Note

Make sure to review BigQuery rate limits if you are planning to use multiple connectors with a high number of tasks.

See also

For an example that shows fully-managed Confluent Cloud connectors in action with Confluent Cloud ksqlDB, see the Cloud ETL example. This example also shows how to use Confluent Cloud CLI to manage your resources in Confluent Cloud.

../../_images/topology.png

Using the Confluent Cloud CLI

Complete the following steps to set up and run the connector using the Confluent Cloud CLI.

Note

Make sure you have all your prerequisites completed.

Step 1: List the available connectors.

Enter the following command to list available connectors:

ccloud connector-catalog list

Step 2: Show the required connector configuration properties.

Enter the following command to show the required connector properties:

ccloud connector-catalog describe <connector-catalog-name>

For example:

ccloud connector-catalog describe BigQuerySink

Example output:

Following are the required configs:
connector.class
name
kafka.api.key
kafka.api.secret
keyfile
project
datasets
input.data.format
tasks.max
topics

Step 3: Create the connector configuration file.

Create a JSON file that contains the connector configuration properties. The following example shows the required connector properties.

{
    "name" : "confluent-bigquery-sink",
    "connector.class" : "BigQuerySink",
    "kafka.api.key" : "<my-kafka-api-key>",
    "kafka.api.secret" : "<my-kafka-api-secret>",
    "keyfile" : "omitted",
    "project" : "<my-BigQuery-project>",
    "datasets" : "<my-BigQuery-dataset>",
    "input.data.format" : "AVRO",
    "autoCreateTables" : "true"
    "sanitizeTopics" : "true"
    "autoUpdateSchemas" : "true"
    "sanitizeFieldNames" : "true"
    "tasks.max" : "1"
    "topics" : "pageviews",
}

Note the following property definitions:

  • "name": Sets a name for your new connector.
  • "connector.class": Identifies the connector plugin name.
  • "topics": Identifies the topic name or a comma-separated list of topic names.
  • "keyfile": This contains the contents of the downloaded JSON file. See Formatting keyfile credentials for details about how to format and use the contents of the downloaded credentials file.
  • "input.data.format": Sets the input message format (data coming from the Kafka topic). Valid entries are AVRO, JSON_SR, PROTOBUF, or JSON. You must have Confluent Cloud Schema Registry configured if using a schema-based message format (for example, Avro, JSON_SR (JSON Schema), or Protobuf).

The following are additional properties you can use. These properties default to false if not used.

  • "autoCreateTables": Designates whether to automatically create BigQuery tables if they don’t already exist.

  • "sanitizeTopics": Designates whether to automatically sanitize topic names before using them as table names. If not enabled, topic names are used as table names.

    Note

    Source topic names must comply with BigQuery naming conventions even if sanitizeTopics is set to true.

  • "autoUpdateSchemas": Designates whether or not to automatically update BigQuery tables. Used with Schema Registry.

  • "sanitizeFieldNames": Designates whether to automatically sanitize field names before using them as column names in BigQuery. BigQuery specifies that field names can only contain letters, numbers, and underscores. The sanitizer replaces invalid symbols with underscores. If the field name starts with a digit, the sanitizer adds an underscore in front of field name.

    Caution

    Fields a.b and a_b will have same value after sanitizing, which could cause a key duplication error. If not used, field names are used as column names.

Configuration properties that are not listed use the default values. For default values and property definitions, see Google BigQuery Sink Connector Configuration Properties.

Formatting keyfile credentials

The contents of the downloaded credentials file must be converted to string format before it can be used in the connector configuration.

  1. Convert the JSON file contents into string format. You can use an online converter tool to do this. For example: JSON to String Online Converter.

  2. Add the escape character \ before all \n entries in the Private Key section so that each section begins with \\n (see the highlighted lines below). The example below has been formatted so that the \\n entries are easier to see. Most of the credentials key has been omitted.

    Tip

    A script is available that converts the credentials to a string and also adds the additional escape characters where needed. See Stringify GCP Credentials.

      {
          "name" : "confluent-bigquery-sink",
          "connector.class" : "GcsSink",
          "kafka.api.key" : "<my-kafka-api-keyk>",
          "kafka.api.secret" : "<my-kafka-api-secret>",
          "topics" : "pageviews",
          "keyfile" : "{\"type\":\"service_account\",\"project_id\":\"connect-
          1234567\",\"private_key_id\":\"omitted\",
          \"private_key\":\"-----BEGIN PRIVATE KEY-----
          \\nMIIEvAIBADANBgkqhkiG9w0BA
          \\n6MhBA9TIXB4dPiYYNOYwbfy0Lki8zGn7T6wovGS5\opzsIh
          \\nOAQ8oRolFp\rdwc2cC5wyZ2+E+bhwn
          \\nPdCTW+oZoodY\\nOGB18cCKn5mJRzpiYsb5eGv2fN\/J
          \\n...rest of key omitted...
          \\n-----END PRIVATE KEY-----\\n\",
          \"client_email\":\"pub-sub@connect-123456789.iam.gserviceaccount.com\",
          \"client_id\":\"123456789\",\"auth_uri\":\"https:\/\/accounts.google.com\/o\/oauth2\/
          auth\",\"token_uri\":\"https:\/\/oauth2.googleapis.com\/
          token\",\"auth_provider_x509_cert_url\":\"https:\/\/
          www.googleapis.com\/oauth2\/v1\/
          certs\",\"client_x509_cert_url\":\"https:\/\/www.googleapis.com\/
          robot\/v1\/metadata\/x509\/pub-sub%40connect-
          123456789.iam.gserviceaccount.com\"}",
          "project": "<my-BigQuery-project>",
          "datasets":"<my-BigQuery-dataset>",
          "data.format":"AVRO",
          "tasks.max" : "1"
      }
    
  3. Add all the converted string content to the "keyfile" credentials section of your configuration file as shown in the example above.

Step 4: Load the configuration file and create the connector.

Enter the following command to load the configuration and start the connector:

ccloud connector create --config <file-name>.json

For example:

ccloud connector create --config bigquery-sink-config.json

Example output:

Created connector confluent-bigquery-sink lcc-ix4dl

Step 5: Check the connector status.

Enter the following command to check the connector status:

ccloud connector list

Example output:

ID          |       Name              | Status  | Type
+-----------+-------------------------+---------+------+
lcc-ix4dl   | confluent-bigquery-sink | RUNNING | sink

Step 6: Check the results in BigQuery.

  1. From the Google Cloud Console, go to your BigQuery project.
  2. Query your datasets and verify that new records are being added.

Tip

When you launch a connector, a Dead Letter Queue topic is automatically created. See Confluent Cloud Dead Letter Queue for details.

For additional information about this connector, see Google BigQuery Sink Connector for Confluent Platform. Note that not all Confluent Platform connector features are provided in the Confluent Cloud connector.

Note

Make sure to review BigQuery rate limits if you are planning to use multiple connectors with a high number of tasks.

Next Steps

See also

For an example that shows fully-managed Confluent Cloud connectors in action with Confluent Cloud ksqlDB, see the Cloud ETL example. This example also shows how to use Confluent Cloud CLI to manage your resources in Confluent Cloud.

../../_images/topology.png