diff --git a/nova/cmd/conductor.py b/nova/cmd/conductor.py
index 42c736ebc3f1..4d58b5864cd7 100644
--- a/nova/cmd/conductor.py
+++ b/nova/cmd/conductor.py
@@ -21,6 +21,7 @@ from oslo_log import log as logging
 from oslo_reports import guru_meditation_report as gmr
 from oslo_reports import opts as gmr_opts
 
+from nova.conductor import rpcapi
 import nova.conf
 from nova import config
 from nova import objects
@@ -42,7 +43,7 @@ def main():
     gmr.TextGuruMeditation.setup_autorun(version, conf=CONF)
 
     server = service.Service.create(binary='nova-conductor',
-                                    topic=CONF.conductor.topic)
+                                    topic=rpcapi.RPC_TOPIC)
     workers = CONF.conductor.workers or processutils.get_worker_count()
     service.serve(server, workers=workers)
     service.wait()
diff --git a/nova/conductor/api.py b/nova/conductor/api.py
index 91f8811cbf84..c7d8fbd85888 100644
--- a/nova/conductor/api.py
+++ b/nova/conductor/api.py
@@ -31,7 +31,7 @@ class API(object):
 
     def __init__(self):
         self.conductor_rpcapi = rpcapi.ConductorAPI()
-        self.base_rpcapi = baserpc.BaseAPI(topic=CONF.conductor.topic)
+        self.base_rpcapi = baserpc.BaseAPI(topic=rpcapi.RPC_TOPIC)
 
     def object_backport_versions(self, context, objinst, object_versions):
         return self.conductor_rpcapi.object_backport_versions(context, objinst,
diff --git a/nova/conductor/rpcapi.py b/nova/conductor/rpcapi.py
index 5b58c279dc0d..21ab0a0175d7 100644
--- a/nova/conductor/rpcapi.py
+++ b/nova/conductor/rpcapi.py
@@ -25,6 +25,7 @@ from nova import profiler
 from nova import rpc
 
 CONF = nova.conf.CONF
+RPC_TOPIC = 'conductor'
 
 
 @profiler.trace_cls("rpc")
@@ -211,7 +212,7 @@ class ConductorAPI(object):
 
     def __init__(self):
         super(ConductorAPI, self).__init__()
-        target = messaging.Target(topic=CONF.conductor.topic, version='3.0')
+        target = messaging.Target(topic=RPC_TOPIC, version='3.0')
         version_cap = self.VERSION_ALIASES.get(CONF.upgrade_levels.conductor,
                                                CONF.upgrade_levels.conductor)
         serializer = objects_base.NovaObjectSerializer()
@@ -284,7 +285,7 @@ class ComputeTaskAPI(object):
 
     def __init__(self):
         super(ComputeTaskAPI, self).__init__()
-        target = messaging.Target(topic=CONF.conductor.topic,
+        target = messaging.Target(topic=RPC_TOPIC,
                                   namespace='compute_task',
                                   version='1.0')
         serializer = objects_base.NovaObjectSerializer()
diff --git a/nova/conf/conductor.py b/nova/conf/conductor.py
index 6ea97cd79ef9..7ca1f855e7e7 100644
--- a/nova/conf/conductor.py
+++ b/nova/conf/conductor.py
@@ -26,19 +26,6 @@ and finally, how many worker processes will be used.
 )
 
 ALL_OPTS = [
-    cfg.StrOpt(
-        'topic',
-        default='conductor',
-        deprecated_for_removal=True,
-        deprecated_since='15.0.0',
-        deprecated_reason="""
-There is no need to let users choose the RPC topic for all services - there
-is little gain from this. Furthermore, it makes it really easy to break Nova
-by using this option.
-""",
-        help="""
-Topic exchange name on which conductor nodes listen.
-"""),
     cfg.IntOpt(
         'workers',
         help="""
diff --git a/releasenotes/notes/remove-topic-config-opts-705ebd829a6e80b6.yaml b/releasenotes/notes/remove-topic-config-opts-705ebd829a6e80b6.yaml
new file mode 100644
index 000000000000..81f44258d46f
--- /dev/null
+++ b/releasenotes/notes/remove-topic-config-opts-705ebd829a6e80b6.yaml
@@ -0,0 +1,7 @@
+---
+upgrade:
+  - |
+    The ``[conductor] topic`` configuration option was previously deprecated
+    and is now removed from nova.  There was no need to let users choose the
+    RPC topics for all services. There was little benefit from this and it made
+    it really easy to break nova by changing the value of topic options.