このコンテンツは選択した言語では利用できません。
Chapter 8. Updating Apicurio Registry configuration
Configuration keys in Apicurio Registry 3.x adopt a unified apicurio. namespace and reorganize authentication, eventing, UI, and storage settings. Review and update your deployment descriptors to match the new naming scheme.
Configuration property changes are extensive in 3.x. Review all sections carefully and test in a staging environment before migrating production deployments.
Understanding configuration changes
Apicurio Registry 3.x introduces major configuration changes:
-
Namespace consolidation: Most properties now use the
apicurio.prefix -
Storage configuration: Database settings moved out of
quarkus.datasource.*namespace - Authentication: OAuth2/OIDC configuration uses full realm URLs
-
KafkaSQL: New
apicurio.kafkasql.*namespace with different topic requirements - API features: New granular deletion control properties
8.1. Configuring storage リンクのコピーリンクがクリップボードにコピーされました!
SQL storage (PostgreSQL, MySQL, H2)
You must use separate database instances or schemas for v2 and v3 because the database schemas are incompatible.
| Registry 2.x property | Registry 3.x property |
|---|---|
|
|
|
|
|
|
|
|
|
|
| Not required (auto-detected from URL) |
|
|
|
| Not applicable |
|
| Not applicable |
|
Example migration:
Use separate database instances or different database names for v2 and v3. The v3 database schema is incompatible with v2.
KafkaSQL storage
You must use a different Kafka topic for v3 than v2 because the journal formats are incompatible.
| Registry 2.x property | Registry 3.x property |
|---|---|
|
|
|
|
|
|
|
|
|
| Not applicable |
|
Example migration:
Use a different topic name for v3 (kafkasql-journal-v3) than v2 (kafkasql-journal-v2). The v3 journal format is incompatible with v2.
Understanding KafkaSQL storage
Apicurio Registry 3.x completely re-engineers the KafkaSQL storage implementation with significant architectural improvements.
Architectural changes in v3
Apicurio Registry 3.x introduces a fundamentally different KafkaSQL implementation:
- True journaling approach: The new implementation uses a true event journaling pattern
- No log compaction: Unlike v2, the v3 implementation does not rely on Kafka log compaction
- Immutable event log: All registry operations are stored as immutable events in the journal topic
- Improved consistency: Better handling of concurrent operations and edge cases
Kafka topic configuration
The v3 KafkaSQL journal topic requires specific Kafka topic settings:
Cleanup policy:
Configure the journal topic with cleanup.policy=delete and infinite retention (retention.ms=-1). Do not use log compaction. You must preserve all journal events for proper registry operation.
Creating the topic:
- 1
- The partition count is configurable. All journal messages use a global partition key for ordering, so a single partition is sufficient. Adjust based on your Kafka cluster configuration.
Verifying topic configuration:
Snapshotting feature (advanced)
Apicurio Registry 3.x KafkaSQL includes an optional snapshotting feature for advanced use cases.
What is snapshotting?
Snapshotting creates periodic database snapshots of the registry state, providing:
- Faster startup times: Registry loads from the snapshot instead of replaying the entire journal
- Backup capability: Use snapshots for disaster recovery
- Optional journal cleanup: When snapshotting is enabled, you can configure finite retention to remove older journal events
When to use snapshotting:
- Large registries with many artifacts (thousands+)
- Long-running deployments with growing journal topics
- Need for faster registry startup/recovery times
Without snapshotting enabled, you must preserve all journal events (infinite retention). If you enable snapshotting and want to use finite retention, set apicurio.kafkasql.topic-configuration-verification-override-enabled=true and ensure snapshots are created more frequently than messages are deleted.
Snapshotting is an advanced feature. Most deployments do not need snapshotting enabled. Consult the official Apicurio Registry documentationfor more information on how to configure and use the snapshotting feature.
Configuring authentication and authorization
Authentication configuration changes significantly in 3.x, particularly for OAuth2/OIDC integration. Update your configuration properties as shown in the following table.
| Registry 2.x property | Registry 3.x property |
|---|---|
|
|
|
|
|
Use |
|
|
Included in |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Example migration with Keycloak:
The QUARKUS_OIDC_AUTH_SERVER_URL property in v3 requires the full realm path (for example, https://keycloak.example.com/realms/registry). In v2, you specified the realm using a separate property.
Configuring API and deletion settings
Apicurio Registry 3.x introduces granular control over deletion operations.
| Registry 2.x property | Registry 3.x property |
|---|---|
|
|
|
| Not available |
|
| Not available |
|
|
|
|
|
|
|
Example migration:
Configuring TLS/HTTPS
TLS configuration remains unchanged between v2 and v3 for server-side settings. Use the same properties as shown in the following table.
| Registry 2.x property | Registry 3.x property |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
Example (same for v2 and v3):
# TLS configuration (unchanged) QUARKUS_HTTP_SSL_PORT=8443 QUARKUS_HTTP_SSL_CERTIFICATE_KEY_STORE_FILE=/certs/registry-keystore.p12 QUARKUS_HTTP_SSL_CERTIFICATE_KEY_STORE_PASSWORD=password123 QUARKUS_HTTP_INSECURE_REQUESTS=disabled
# TLS configuration (unchanged)
QUARKUS_HTTP_SSL_PORT=8443
QUARKUS_HTTP_SSL_CERTIFICATE_KEY_STORE_FILE=/certs/registry-keystore.p12
QUARKUS_HTTP_SSL_CERTIFICATE_KEY_STORE_PASSWORD=password123
QUARKUS_HTTP_INSECURE_REQUESTS=disabled
TLS configuration is identical for v2 and v3. If the hostname and routes remain the same, reuse the same certificates.
Using the migration checklist
-
Inventory all configuration files, including deployment manifests,
application.properties, and environment variables. - Create a mapping spreadsheet documenting v2 properties and their v3 equivalents.
Update configuration for v3 deployment:
- Storage: Change database name or topic name
- Authentication: Update to full realm URL format
-
Properties: Apply
apicurio.*namespace
- Deploy v3 to staging environment with updated configuration.
- Monitor startup logs for configuration errors or warnings.
Test all functionality:
- Storage connectivity
- Authentication and authorization
- API operations (create, read, update, delete)
- UI access
- Document any custom or undocumented properties for future reference.
Issue: v3 fails to start with "Storage not configured"
Symptoms: * Registry pod/container fails to start * Logs show: Storage kind not configured
Cause: Missing APICURIO_STORAGE_KIND property.
Solution:
Issue: v3 authentication fails with "User is not authenticated"
Symptoms: * All API requests return 401 Unauthorized * Even with valid access token
Cause: Incorrect OAuth2/OIDC configuration, typically missing realm path.
Solution:
Check that QUARKUS_OIDC_AUTH_SERVER_URL includes the full realm path:
# Wrong (v2 style) QUARKUS_OIDC_AUTH_SERVER_URL=https://keycloak:8443 # Correct (v3 requires realm path) QUARKUS_OIDC_AUTH_SERVER_URL=https://keycloak:8443/realms/registry
# Wrong (v2 style)
QUARKUS_OIDC_AUTH_SERVER_URL=https://keycloak:8443
# Correct (v3 requires realm path)
QUARKUS_OIDC_AUTH_SERVER_URL=https://keycloak:8443/realms/registry
Verify Keycloak is accessible from the registry container:
curl -k https://keycloak:8443/realms/registry/.well-known/openid-configuration
curl -k https://keycloak:8443/realms/registry/.well-known/openid-configuration
Issue: Database connection fails
Symptoms: * Registry fails to start * Logs show JDBC connection errors
Cause: Using old REGISTRY_DATASOURCE_* or QUARKUS_DATASOURCE_* properties.
Solution:
Update to v3 datasource properties:
Issue: CORS errors in browser when accessing UI
Symptoms: * UI loads but API calls fail * Browser console shows CORS errors
Cause: CORS property name changed in v3.
Solution:
# Wrong (v2 property name) CORS_ALLOWED_ORIGINS=* # Correct (v3 property name) QUARKUS_HTTP_CORS_ORIGINS=*
# Wrong (v2 property name)
CORS_ALLOWED_ORIGINS=*
# Correct (v3 property name)
QUARKUS_HTTP_CORS_ORIGINS=*
Issue: Role-based authorization not working
Symptoms: * Users can access registry but cannot perform admin operations * No 403 Forbidden errors, but operations fail silently
Cause: Role configuration properties not updated to v3 namespace.
Solution:
# Update all role properties APICURIO_AUTH_ROLE-BASED-AUTHORIZATION=true APICURIO_AUTH_ROLES_ADMIN=sr-admin APICURIO_AUTH_ROLES_DEVELOPER=sr-developer APICURIO_AUTH_ROLES_READONLY=sr-readonly
# Update all role properties
APICURIO_AUTH_ROLE-BASED-AUTHORIZATION=true
APICURIO_AUTH_ROLES_ADMIN=sr-admin
APICURIO_AUTH_ROLES_DEVELOPER=sr-developer
APICURIO_AUTH_ROLES_READONLY=sr-readonly
Verify user has correct roles in Keycloak and token includes expected roles:
# Decode JWT token to check roles echo $ACCESS_TOKEN | cut -d. -f2 | base64 -d | jq .realm_access.roles
# Decode JWT token to check roles
echo $ACCESS_TOKEN | cut -d. -f2 | base64 -d | jq .realm_access.roles