본관은 선산(善山). 자는 지화(至和). 할아버지는 김수(金須)이며, 아버지는 한성우윤 김하량(金廈樑)이다.
1672년(현종 13) 별시문과에 병과로 급제하여 사헌부에 들어갔다. 1680년(숙종 6) 경신대출척(庚申大黜陟)으로 남인이 실세하자 관직에서 쫓겨났다.
1689년 기사환국으로 남인이 재집권하자 다시 등용되어 사헌부·사간원·홍문관의 청요직(淸要職)을 두루 거쳐 대사간에 이르렀다. 재직 동안 조성(趙䃏)의 신원(伸寃: 억울하게 입은 죄를 회복시킴)과 오정창(吳挺昌)의 치제(致祭:국왕이 제물과 제문을 보내어 제사를 지내줌)를 위하여 노력하였다.
또한, 대동법의 시행과정에서 품관(品官)과 향리(鄕吏)에 의하여 빚어지는 여러가지 민폐를 시정할 것 등, 평소에 생각한 바를 크게 다섯가지로 나누어 장문의 소를 올리기도 하였다. 이어 사은사의 서장관(書狀官)에 발탁되어 청나라에 다녀왔다.
1694년 대사간으로 재임시 갑술옥사로 남인이 물러나고 서인이 집권하자 관직에서 물러났다. 이때 유학(幼學) 김인(金寅) 등의 고변서(告變書)에 신천군수(信川郡守) 윤희(尹熺)와 서찰을 서로 통한 것으로 무고되었다. 결국 역모를 한 것으로 몰려 몇 차례의 국문을 받고 먼 변방으로 유배되어 죽었다.