diff --git a/BUILD b/BUILD
index 6b186fccbbb..2f6309c8aef 100644
--- a/BUILD
+++ b/BUILD
@@ -165,6 +165,7 @@ cc_library(
"src/core/client_config/resolver_registry.h",
"src/core/client_config/resolvers/dns_resolver.h",
"src/core/client_config/resolvers/unix_resolver_posix.h",
+ "src/core/client_config/resolvers/zookeeper_resolver.h",
"src/core/client_config/subchannel.h",
"src/core/client_config/subchannel_factory.h",
"src/core/client_config/uri_parser.h",
@@ -282,6 +283,7 @@ cc_library(
"src/core/client_config/resolver_registry.c",
"src/core/client_config/resolvers/dns_resolver.c",
"src/core/client_config/resolvers/unix_resolver_posix.c",
+ "src/core/client_config/resolvers/zookeeper_resolver.c",
"src/core/client_config/subchannel.c",
"src/core/client_config/subchannel_factory.c",
"src/core/client_config/uri_parser.c",
@@ -417,6 +419,7 @@ cc_library(
"src/core/client_config/resolver_registry.h",
"src/core/client_config/resolvers/dns_resolver.h",
"src/core/client_config/resolvers/unix_resolver_posix.h",
+ "src/core/client_config/resolvers/zookeeper_resolver.h",
"src/core/client_config/subchannel.h",
"src/core/client_config/subchannel_factory.h",
"src/core/client_config/uri_parser.h",
@@ -512,6 +515,7 @@ cc_library(
"src/core/client_config/resolver_registry.c",
"src/core/client_config/resolvers/dns_resolver.c",
"src/core/client_config/resolvers/unix_resolver_posix.c",
+ "src/core/client_config/resolvers/zookeeper_resolver.c",
"src/core/client_config/subchannel.c",
"src/core/client_config/subchannel_factory.c",
"src/core/client_config/uri_parser.c",
@@ -974,6 +978,7 @@ objc_library(
"src/core/client_config/resolver_registry.c",
"src/core/client_config/resolvers/dns_resolver.c",
"src/core/client_config/resolvers/unix_resolver_posix.c",
+ "src/core/client_config/resolvers/zookeeper_resolver.c",
"src/core/client_config/subchannel.c",
"src/core/client_config/subchannel_factory.c",
"src/core/client_config/uri_parser.c",
@@ -1110,6 +1115,7 @@ objc_library(
"src/core/client_config/resolver_registry.h",
"src/core/client_config/resolvers/dns_resolver.h",
"src/core/client_config/resolvers/unix_resolver_posix.h",
+ "src/core/client_config/resolvers/zookeeper_resolver.h",
"src/core/client_config/subchannel.h",
"src/core/client_config/subchannel_factory.h",
"src/core/client_config/uri_parser.h",
diff --git a/Makefile b/Makefile
index e7b784b857b..e1b803d9356 100644
--- a/Makefile
+++ b/Makefile
@@ -3212,6 +3212,7 @@ LIBGRPC_SRC = \
src/core/client_config/resolver_registry.c \
src/core/client_config/resolvers/dns_resolver.c \
src/core/client_config/resolvers/unix_resolver_posix.c \
+ src/core/client_config/resolvers/zookeeper_resolver.c \
src/core/client_config/subchannel.c \
src/core/client_config/subchannel_factory.c \
src/core/client_config/uri_parser.c \
@@ -3472,6 +3473,7 @@ LIBGRPC_UNSECURE_SRC = \
src/core/client_config/resolver_registry.c \
src/core/client_config/resolvers/dns_resolver.c \
src/core/client_config/resolvers/unix_resolver_posix.c \
+ src/core/client_config/resolvers/zookeeper_resolver.c \
src/core/client_config/subchannel.c \
src/core/client_config/subchannel_factory.c \
src/core/client_config/uri_parser.c \
diff --git a/build.json b/build.json
index 19078ed7265..2b53e0b5089 100644
--- a/build.json
+++ b/build.json
@@ -126,6 +126,7 @@
"src/core/client_config/resolver_registry.h",
"src/core/client_config/resolvers/dns_resolver.h",
"src/core/client_config/resolvers/unix_resolver_posix.h",
+ "src/core/client_config/resolvers/zookeeper_resolver.h",
"src/core/client_config/subchannel.h",
"src/core/client_config/subchannel_factory.h",
"src/core/client_config/uri_parser.h",
@@ -221,6 +222,7 @@
"src/core/client_config/resolver_registry.c",
"src/core/client_config/resolvers/dns_resolver.c",
"src/core/client_config/resolvers/unix_resolver_posix.c",
+ "src/core/client_config/resolvers/zookeeper_resolver.c",
"src/core/client_config/subchannel.c",
"src/core/client_config/subchannel_factory.c",
"src/core/client_config/uri_parser.c",
diff --git a/gRPC.podspec b/gRPC.podspec
index bdcbc3f6122..52228489612 100644
--- a/gRPC.podspec
+++ b/gRPC.podspec
@@ -167,6 +167,7 @@ Pod::Spec.new do |s|
'src/core/client_config/resolver_registry.h',
'src/core/client_config/resolvers/dns_resolver.h',
'src/core/client_config/resolvers/unix_resolver_posix.h',
+ 'src/core/client_config/resolvers/zookeeper_resolver.h',
'src/core/client_config/subchannel.h',
'src/core/client_config/subchannel_factory.h',
'src/core/client_config/uri_parser.h',
@@ -291,6 +292,7 @@ Pod::Spec.new do |s|
'src/core/client_config/resolver_registry.c',
'src/core/client_config/resolvers/dns_resolver.c',
'src/core/client_config/resolvers/unix_resolver_posix.c',
+ 'src/core/client_config/resolvers/zookeeper_resolver.c',
'src/core/client_config/subchannel.c',
'src/core/client_config/subchannel_factory.c',
'src/core/client_config/uri_parser.c',
@@ -425,6 +427,7 @@ Pod::Spec.new do |s|
'src/core/client_config/resolver_registry.h',
'src/core/client_config/resolvers/dns_resolver.h',
'src/core/client_config/resolvers/unix_resolver_posix.h',
+ 'src/core/client_config/resolvers/zookeeper_resolver.h',
'src/core/client_config/subchannel.h',
'src/core/client_config/subchannel_factory.h',
'src/core/client_config/uri_parser.h',
diff --git a/tools/doxygen/Doxyfile.core.internal b/tools/doxygen/Doxyfile.core.internal
index e2701eca3a2..7178d349f34 100644
--- a/tools/doxygen/Doxyfile.core.internal
+++ b/tools/doxygen/Doxyfile.core.internal
@@ -802,6 +802,7 @@ src/core/client_config/resolver_factory.h \
src/core/client_config/resolver_registry.h \
src/core/client_config/resolvers/dns_resolver.h \
src/core/client_config/resolvers/unix_resolver_posix.h \
+src/core/client_config/resolvers/zookeeper_resolver.h \
src/core/client_config/subchannel.h \
src/core/client_config/subchannel_factory.h \
src/core/client_config/uri_parser.h \
@@ -919,6 +920,7 @@ src/core/client_config/resolver_factory.c \
src/core/client_config/resolver_registry.c \
src/core/client_config/resolvers/dns_resolver.c \
src/core/client_config/resolvers/unix_resolver_posix.c \
+src/core/client_config/resolvers/zookeeper_resolver.c \
src/core/client_config/subchannel.c \
src/core/client_config/subchannel_factory.c \
src/core/client_config/uri_parser.c \
diff --git a/tools/run_tests/sources_and_headers.json b/tools/run_tests/sources_and_headers.json
index b228aaa66cd..82079b6b5da 100644
--- a/tools/run_tests/sources_and_headers.json
+++ b/tools/run_tests/sources_and_headers.json
@@ -8693,6 +8693,7 @@
"src/core/client_config/resolver_registry.h",
"src/core/client_config/resolvers/dns_resolver.h",
"src/core/client_config/resolvers/unix_resolver_posix.h",
+ "src/core/client_config/resolvers/zookeeper_resolver.h",
"src/core/client_config/subchannel.h",
"src/core/client_config/subchannel_factory.h",
"src/core/client_config/uri_parser.h",
@@ -8835,6 +8836,8 @@
"src/core/client_config/resolvers/dns_resolver.h",
"src/core/client_config/resolvers/unix_resolver_posix.c",
"src/core/client_config/resolvers/unix_resolver_posix.h",
+ "src/core/client_config/resolvers/zookeeper_resolver.c",
+ "src/core/client_config/resolvers/zookeeper_resolver.h",
"src/core/client_config/subchannel.c",
"src/core/client_config/subchannel.h",
"src/core/client_config/subchannel_factory.c",
@@ -9142,6 +9145,7 @@
"src/core/client_config/resolver_registry.h",
"src/core/client_config/resolvers/dns_resolver.h",
"src/core/client_config/resolvers/unix_resolver_posix.h",
+ "src/core/client_config/resolvers/zookeeper_resolver.h",
"src/core/client_config/subchannel.h",
"src/core/client_config/subchannel_factory.h",
"src/core/client_config/uri_parser.h",
@@ -9267,6 +9271,8 @@
"src/core/client_config/resolvers/dns_resolver.h",
"src/core/client_config/resolvers/unix_resolver_posix.c",
"src/core/client_config/resolvers/unix_resolver_posix.h",
+ "src/core/client_config/resolvers/zookeeper_resolver.c",
+ "src/core/client_config/resolvers/zookeeper_resolver.h",
"src/core/client_config/subchannel.c",
"src/core/client_config/subchannel.h",
"src/core/client_config/subchannel_factory.c",
diff --git a/vsprojects/grpc/grpc.vcxproj b/vsprojects/grpc/grpc.vcxproj
index 14ddf95f81f..0bac985ae04 100644
--- a/vsprojects/grpc/grpc.vcxproj
+++ b/vsprojects/grpc/grpc.vcxproj
@@ -191,6 +191,7 @@
+
@@ -350,6 +351,8 @@
+
+
diff --git a/vsprojects/grpc/grpc.vcxproj.filters b/vsprojects/grpc/grpc.vcxproj.filters
index 591fe1bb034..dfee04d9fc8 100644
--- a/vsprojects/grpc/grpc.vcxproj.filters
+++ b/vsprojects/grpc/grpc.vcxproj.filters
@@ -121,6 +121,9 @@
src\core\client_config\resolvers
+
+ src\core\client_config\resolvers
+
src\core\client_config
@@ -527,6 +530,9 @@
src\core\client_config\resolvers
+
+ src\core\client_config\resolvers
+
src\core\client_config
diff --git a/vsprojects/grpc_unsecure/grpc_unsecure.vcxproj b/vsprojects/grpc_unsecure/grpc_unsecure.vcxproj
index 4ead6f8d98a..8779ebf87c3 100644
--- a/vsprojects/grpc_unsecure/grpc_unsecure.vcxproj
+++ b/vsprojects/grpc_unsecure/grpc_unsecure.vcxproj
@@ -173,6 +173,7 @@
+
@@ -288,6 +289,8 @@
+
+
diff --git a/vsprojects/grpc_unsecure/grpc_unsecure.vcxproj.filters b/vsprojects/grpc_unsecure/grpc_unsecure.vcxproj.filters
index 45ca1f7c33b..f9f508879aa 100644
--- a/vsprojects/grpc_unsecure/grpc_unsecure.vcxproj.filters
+++ b/vsprojects/grpc_unsecure/grpc_unsecure.vcxproj.filters
@@ -55,6 +55,9 @@
src\core\client_config\resolvers
+
+ src\core\client_config\resolvers
+
src\core\client_config
@@ -410,6 +413,9 @@
src\core\client_config\resolvers
+
+ src\core\client_config\resolvers
+
src\core\client_config