diff --git a/BUILD b/BUILD
index 6b186fccbbbbcb01489f5cf583453664b9fe3bcc..2f6309c8aef975ee9c1996f82c0279af5a90bafe 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 e7b784b857baeafc7be34b1af6d6eefacf9083a5..e1b803d9356f46349ed760c441c7e1033006d219 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 19078ed72654c596282a64bbf7977c533eb66173..2b53e0b5089546c1fbb9560b6b98061edae7b313 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 bdcbc3f612219a424190ad8bff7a6a3b367b75a3..5222848961293bc96c16a85047224a6bba276b34 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 e2701eca3a254e9a8e8a14f215d6374468d14e0a..7178d349f34995bc047de52336322947f53c8924 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 b228aaa66cdb8b505301c931d602fd2de7c0ba30..82079b6b5da0250d0c205be0f9a8b2ccc3f2b12f 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 14ddf95f81f744792221718c918e595ab82a6ab0..0bac985ae046777dccd1f6d4942c84e3a89a4a2f 100644
--- a/vsprojects/grpc/grpc.vcxproj
+++ b/vsprojects/grpc/grpc.vcxproj
@@ -191,6 +191,7 @@
     <ClInclude Include="..\..\src\core\client_config\resolver_registry.h" />
     <ClInclude Include="..\..\src\core\client_config\resolvers\dns_resolver.h" />
     <ClInclude Include="..\..\src\core\client_config\resolvers\unix_resolver_posix.h" />
+    <ClInclude Include="..\..\src\core\client_config\resolvers\zookeeper_resolver.h" />
     <ClInclude Include="..\..\src\core\client_config\subchannel.h" />
     <ClInclude Include="..\..\src\core\client_config\subchannel_factory.h" />
     <ClInclude Include="..\..\src\core\client_config\uri_parser.h" />
@@ -350,6 +351,8 @@
     </ClCompile>
     <ClCompile Include="..\..\src\core\client_config\resolvers\unix_resolver_posix.c">
     </ClCompile>
+    <ClCompile Include="..\..\src\core\client_config\resolvers\zookeeper_resolver.c">
+    </ClCompile>
     <ClCompile Include="..\..\src\core\client_config\subchannel.c">
     </ClCompile>
     <ClCompile Include="..\..\src\core\client_config\subchannel_factory.c">
diff --git a/vsprojects/grpc/grpc.vcxproj.filters b/vsprojects/grpc/grpc.vcxproj.filters
index 591fe1bb034b9ae1f7804273a65c76b4ebbd209d..dfee04d9fc8018b9ef0a68d5d49e199285756703 100644
--- a/vsprojects/grpc/grpc.vcxproj.filters
+++ b/vsprojects/grpc/grpc.vcxproj.filters
@@ -121,6 +121,9 @@
     <ClCompile Include="..\..\src\core\client_config\resolvers\unix_resolver_posix.c">
       <Filter>src\core\client_config\resolvers</Filter>
     </ClCompile>
+    <ClCompile Include="..\..\src\core\client_config\resolvers\zookeeper_resolver.c">
+      <Filter>src\core\client_config\resolvers</Filter>
+    </ClCompile>
     <ClCompile Include="..\..\src\core\client_config\subchannel.c">
       <Filter>src\core\client_config</Filter>
     </ClCompile>
@@ -527,6 +530,9 @@
     <ClInclude Include="..\..\src\core\client_config\resolvers\unix_resolver_posix.h">
       <Filter>src\core\client_config\resolvers</Filter>
     </ClInclude>
+    <ClInclude Include="..\..\src\core\client_config\resolvers\zookeeper_resolver.h">
+      <Filter>src\core\client_config\resolvers</Filter>
+    </ClInclude>
     <ClInclude Include="..\..\src\core\client_config\subchannel.h">
       <Filter>src\core\client_config</Filter>
     </ClInclude>
diff --git a/vsprojects/grpc_unsecure/grpc_unsecure.vcxproj b/vsprojects/grpc_unsecure/grpc_unsecure.vcxproj
index 4ead6f8d98aed5c1acbeac74e324bc5236ab6016..8779ebf87c3ba80c8bc0560db38b4257df358d44 100644
--- a/vsprojects/grpc_unsecure/grpc_unsecure.vcxproj
+++ b/vsprojects/grpc_unsecure/grpc_unsecure.vcxproj
@@ -173,6 +173,7 @@
     <ClInclude Include="..\..\src\core\client_config\resolver_registry.h" />
     <ClInclude Include="..\..\src\core\client_config\resolvers\dns_resolver.h" />
     <ClInclude Include="..\..\src\core\client_config\resolvers\unix_resolver_posix.h" />
+    <ClInclude Include="..\..\src\core\client_config\resolvers\zookeeper_resolver.h" />
     <ClInclude Include="..\..\src\core\client_config\subchannel.h" />
     <ClInclude Include="..\..\src\core\client_config\subchannel_factory.h" />
     <ClInclude Include="..\..\src\core\client_config\uri_parser.h" />
@@ -288,6 +289,8 @@
     </ClCompile>
     <ClCompile Include="..\..\src\core\client_config\resolvers\unix_resolver_posix.c">
     </ClCompile>
+    <ClCompile Include="..\..\src\core\client_config\resolvers\zookeeper_resolver.c">
+    </ClCompile>
     <ClCompile Include="..\..\src\core\client_config\subchannel.c">
     </ClCompile>
     <ClCompile Include="..\..\src\core\client_config\subchannel_factory.c">
diff --git a/vsprojects/grpc_unsecure/grpc_unsecure.vcxproj.filters b/vsprojects/grpc_unsecure/grpc_unsecure.vcxproj.filters
index 45ca1f7c33b441347c39b95211cb2f467eeadecd..f9f508879aa1c11ac585fe9a2f231a3c2b5ff94f 100644
--- a/vsprojects/grpc_unsecure/grpc_unsecure.vcxproj.filters
+++ b/vsprojects/grpc_unsecure/grpc_unsecure.vcxproj.filters
@@ -55,6 +55,9 @@
     <ClCompile Include="..\..\src\core\client_config\resolvers\unix_resolver_posix.c">
       <Filter>src\core\client_config\resolvers</Filter>
     </ClCompile>
+    <ClCompile Include="..\..\src\core\client_config\resolvers\zookeeper_resolver.c">
+      <Filter>src\core\client_config\resolvers</Filter>
+    </ClCompile>
     <ClCompile Include="..\..\src\core\client_config\subchannel.c">
       <Filter>src\core\client_config</Filter>
     </ClCompile>
@@ -410,6 +413,9 @@
     <ClInclude Include="..\..\src\core\client_config\resolvers\unix_resolver_posix.h">
       <Filter>src\core\client_config\resolvers</Filter>
     </ClInclude>
+    <ClInclude Include="..\..\src\core\client_config\resolvers\zookeeper_resolver.h">
+      <Filter>src\core\client_config\resolvers</Filter>
+    </ClInclude>
     <ClInclude Include="..\..\src\core\client_config\subchannel.h">
       <Filter>src\core\client_config</Filter>
     </ClInclude>